V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yafeilee
V2EX  ›  程序员

为你的小程序提供 mobx 数据层驱动

  •  
  •   yafeilee ·
    windy · 2017-04-04 18:39:17 +08:00 · 800 次点击
    这是一个创建于 2772 天前的主题,其中的信息可能已经有所发展或是发生改变。

    微信小程序经过一段时间的发展, 生态已经比较强大了, 我认为它未来将取代微信服务号的地位, 成为另一个重要的入口.

    但开发相对复杂的小程序是一个比较有挑战的事, 其重要原因在于小程序框架的数据管理能力偏弱, 无法直接跨页进行数据共享.

    于是, 我们造了一个轮子: wechat-weapp-mobx, 能够让小程序添加 mobx 数据层驱动.

    mobx VS redux

    开始安利我们的轮子之前, 先来谈一下 mobx 与 redux 这两个数据层的框架.

    毫无疑问, 现在是 redux 的天下, 用过 react 的团队大多都在使用 redux, 它是一个将函数式编程引入数据驱动的方案, 框架轻量简单. 但我们更偏爱 mobx. 它的特点就是特别自然:

    1. 对象式的数据层, 简单易于理解, 业务入侵非常小.
    2. 智能高效的驱动方式, 几乎总是比 redux 快, 甚至快 20 倍以上性能.

    性能分析见这里: https://twitter.com/mweststrate/status/720177443521343488( 需翻墙 )

    不仅在 react 中, 我们 80%团队使用 mobx, 在小程序中, 我们也为 mobx 创造了这个轮子: wechat-weapp-mobx

    如何在小程序中集成 wechat-weapp-mobx

    集成方式:

    1. clone 或者下载代码库到本地:

       git clone https://github.com/80percent/wechat-weapp-mbox
      
    2. mobx.jsobserver.js 文件直接拷贝到小程序的工程中,例如 (下面假设我们把第三方包都安装在 libs 目录下):

      cd wechat-weapp-mobx
      cp mobx.js <小程序根目录>/libs
      cp observer.js <小程序根目录>/libs
      

      上面的命令将包拷贝到小程序的libs目录下

    3. 创建一个 stores 目录, 存放数据层.

    如何使用

    1. 创建 mobx 的 stores

        var extendObservable = require('../libs/mobx').extendObservable;
        var TodoStore = function() {
          extendObservable(this, {
            // observable data
            todos: [],
            todoText: 'aaa',
            // computed data
            get count() {
              return this.todos.length;
            }
          });
      
          // action
          this.addTodo = function(title) {
            this.todos.push( {title: title} );
          }
      
          this.removeTodo = function() {
            this.todos.pop();
          }
        }
      
        module.exports = {
          default: new TodoStore,
        }
      
    2. 绑定页面联动事件

      var observer = require('../libs/observer').observer;
      Page(observer({
        props: {
          todoStore: require('../stores/todoStore').default,
        },
        // your other code below
        onLoad: function(){
        }
      }))
      
    3. 说明

      完成上述两步之后,你就可以在 wxml 中用 props.todoStore 这种方式来访问了, 并且数据联动已经自动工作.

    实际案例 & demo

    我们已经在客户产品中使用访框架, 请放心使用它, 发现问题请在 github 上提供 issue. 我们会及时修复.

    目前我们有两个产品正在使用它, 待上线后公布给大家体验.

    一个完整的 todo list demo 演示: wechat-weapp-mobx-todos

    如果不是对 mobx 特别有爱, 可以试试 wechat-weapp-redux

    求关注

    如果它对你有用, 或者即将对你有用, 请点个关注: wechat-weapp-mobx-todos

    PS: 我目前正在创业, 成立了深圳市百分之八十网络技术有限公司, 专注于互联网产品的 MVP 研发, 如果你的创业想更快更高质量面向市场, 可以来谈谈. 公司官网: https://www.80percent.io

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3366 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 11:34 · PVG 19:34 · LAX 03:34 · JFK 06:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.