2.0.3 • Published 2 years ago

@smt-lib/swanx v2.0.3

Weekly downloads
11
License
ISC
Repository
-
Last release
2 years ago

title: @smt-lib/swanx header: develop nav: extensions

sidebar: @smt-lib/swanx

smt-swanx

解释: 在小程序开发中,总会遇到多页面需要使用同一数据的情况,swanx是个轻量级数据管理工具,可以帮助开发者解决数据监听,多页面共用数据,子组件轻松获得父组件数据等功能。

npm 引入 swanx

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

npm install @smt-lib/swanx

方法 createStore

创建store,可多页面共用一个,也可以每个页面独立使用自己的store

属性名类型必填默认值说明
stateObject数据状态
fieldsObject/Array需要同步到小程序data上的数据。当类型为Object时,可以自定义挂载到data上的属性名。fields支持制定对象中的子元素,例如: 'a.b'
mutationsObjectkeycommit时提交的事件名,value为执行的修改store.state状态的function,第一个参数为state,第二个参数为commit时传入的参数payload
actionsObjectmutation类似,keydispatch时提交的事件名,value为执行的事件function,第一个参数为contextcontext包含commit方法和state属性,第二个参数为dispatch传入的参数payload

返回值

名称类型说明
subscribeFunction订阅方法
getStateFunction获取state
dispatchFunction更改store上数据状态,并触发有依赖的监听函数
unsubscribeAllFunction清空所有订阅,无参数传入

subscribe参数说明

参数类型必填默认值说明
第一个参数Array/Object*会变化的数据,默认fields中所有数据变化都会触发回调函数
第二个参数Function数据变化时的回调函数

getState参数说明

参数类型必填默认值说明
第一个参数String要获取数据的key,例如:'a' , 'a.b.c'

commit参数说明

参数类型必填默认值说明
第一个参数Stringmutation方法名
第二个参数Object/Array/String传入mutation的参数

dispatch参数说明

参数类型必填默认值说明
第一个参数Stringaction方法名
第二个参数Object/Array/String传入action的参数

方法 storeBinding

在onLoad或者attached时,将创建的store和当前上下文绑定

storeBinding参数说明

参数类型必填默认值说明
第一个参数Object当前上下文
第二个参数Object创建后的store

返回值

类型说明
Function清空所有storeBinding

方法 connect

使用connect装饰过的组件或者页面,可以更方便的使用父级的store,避免逐层传递公用数据。

connect参数说明

参数类型必填默认值说明
第一个参数Object页面或组件原型
第二个参数Object创建后的store,如果没填则默认使用当前组件的父页面的store

返回值

类型说明
Function装饰后的组件或页面原型

各部分代码示例

store示例

// store.js
import { createStore } from "@smt-lib/swanx";
export const store = createStore({
    state: {
        a: 1,
        b: {
            d: 4,
            e: 5
        },
        c: 3
    },
    fields: ['a', 'b.d'],
    mutations: {
        changeA(state, num) {
            state.a = num;
        },
        addD(state) {
            state.b.d++;
        }
    }
    actions: {
        changeA(context, num) {
            context.commit('changeA', num);
        },
        addD({commit}) {
            setTimeout(() => {
                commit('addD');
            }, 300);
        }
    }
});

// a页面
import { store } from "./store";
import { bindStore } from "@smt-lib/swanx";
Page({
    data: {},
    onLoad() {
        this.unbindStore = storeBinding(this, store);
        console.log(this.store);
    },

    myChangeA() {
        store.dispatch('changeA', 1);
    },

    myAddD() {
        store.commit('addD');
    }

    unOnload() {
        this.unbindStore();
    }
});


// a页面的b组件
import { connect } from "@smt-lib/swanx";
const newComponent = connect(Component);
newComponent({
    properties: {},
    pageLifetimes: {
        attached() {
            console.log(this.data.a);
            store.subscribe(['b.d'], state => {
                console.log(state.b);
            });
        }
    },
    method: {
        myChangeA() {
            this.store.dispatch('changeA', 1);
        },

        myAddD() {
            this.store.commit('addD');
        }
    }
});
2.0.3

2 years ago

2.0.2

2 years ago

2.0.1

2 years ago

2.0.0

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

4 years ago

1.0.0

4 years ago