1.0.1 • Published 4 years ago

@smt-lib/mobx v1.0.1

Weekly downloads
28
License
ISC
Repository
-
Last release
4 years ago

title: smt-mobx header: develop nav: extensions

sidebar: smt-mobx

npm引入smt-mobx

解释: 在小程序开发中,总会遇到多页面需要使用同一数据的情况,从而产生了希望引入mobx、redux等数据状态管理框架的诉求。smt-mobx是小程序使用mobx的连接器,帮助开发者在小程序开发中使用mobx。mobx使用的是4.13.1版本。mobx官网

小程序种使用三方npm包方法,见npm使用说明

    npm install @smt-lib/mobx

方法:createStoreManager

在onLoad或者attached时创建storeManager

createStoreManager参数说明

参数类型必填默认值说明
targetObject当前上下文
storeObjectstore相关信息
throttleFunctionswan.nextTick可throttle的函数

第二个参数说明

属性名类型必填默认值说明
storeObject当前上下文
fieldsObject/Array需要同步到小程序data上的数据。当类型为Object时,可以自定义挂载到data上的属性名
actionsObject/Array修改store状态的动作,当类型为Object时,可以自定义挂载到storeManager上的方法名

返回值

名称类型说明
destoryAllFunction清空所有storeManager
updateImmediatelyFunction及时同步store的状态更新到小程序data上
actions中的方法Functionactions中的所有方法,都会挂到storeManager

各部分代码示例

store示例

import { observable, action } from "mobx";
export const store = observable({
  // 数据字段
  a: 1,
  b: 2,
  addA: action(function () {
    this.a++;
  }),
  addB: action(function () {
    this.b++;
  })
});

页面示例

import {createStoreManager} from '@smt-lib/mobx';
import {store} from './store';

Page({
    data: {
        // 默认数据
    },

    onLoad () {
        // 将actions上的方法,绑到this.storeManager上
        // 将fields上的数据,链接到this.data上
        this.storeManager = createStoreManager(this, {
            store,
            fields: ['a', 'b'],
            actions: ['addA', 'addB']
        });
    },

    onUnload() {
        // 在onUnload时需要清空绑定的storeManager
        this.storeManager.destoryAll();
    }

});

自定义组件示例

import {createStoreManager} from '@smt-lib/mobx';
import {store} from './store';

Component({
    properties: {
        // 默认数据
    },
    lifetimes: {
        attached() {
            // 将actions上的方法,绑到this上
            // 将fields上的数据,绑到this.data上
            this.storeManager = createStoreManager(this, {
                store,
                fields: {
                    aa: 'a', 
                    bb: 'b'
                },
                actions: {
                    myAddA: 'addA',
                    myAddB: () => store.addB
                }
            });
        },
        detached() {
            // 在detached时需要清空绑定的storeManager
            this.storeManager.destoryAll();
        }
    },
    methods: {
        updateNum() {
            this.data.aa   // 获取store中的a
            this.storeManager.myAddA();  // 调用action中的addA方法
            this.storeManager.updateImmediately();
        }
    }
});