@smt-lib/swanx
v2.0.3
Published
轻量级状态管理工具
Downloads
12
Readme
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
。
|属性名 |类型 |必填 | 默认值 |说明|
|---- | ---- | ---- | ----|----|
|state |Object | 是 | | 数据状态 |
|fields |Object/Array | 是 | |需要同步到小程序data
上的数据。当类型为Object
时,可以自定义挂载到data
上的属性名。fields
支持制定对象中的子元素,例如: 'a.b'
|
|mutations|Object|否| |key
为commit
时提交的事件名,value
为执行的修改store.state
状态的function
,第一个参数为state
,第二个参数为commit
时传入的参数payload
|
|actions|Object|否| |与mutation
类似,key
为dispatch
时提交的事件名,value
为执行的事件function
,第一个参数为context
,context
包含commit
方法和state
属性,第二个参数为dispatch
传入的参数payload
|
返回值
|名称|类型 |说明|
|---- | ---- | ---- |
|subscribe|Function | 订阅方法 |
|getState|Function| 获取state
值|
|dispatch|Function|更改store
上数据状态,并触发有依赖的监听函数|
|unsubscribeAll|Function|清空所有订阅,无参数传入|
** subscribe
参数说明 **
|参数 |类型 |必填 | 默认值 |说明|
|---- | ---- | ---- | ----|----|
|第一个参数 |Array/Object | 否 | * | 会变化的数据,默认fields
中所有数据变化都会触发回调函数|
|第二个参数 |Function | 是 | |数据变化时的回调函数|
** getState
参数说明 **
|参数 |类型 |必填 | 默认值 |说明|
|---- | ---- | ---- | ----|----|
|第一个参数 |String | 是 | | 要获取数据的key
,例如:'a'
, 'a.b.c'
|
** commit
参数说明 **
|参数 |类型 |必填 | 默认值 |说明|
|---- | ---- | ---- | ----|----|
|第一个参数 |String | 是 | | mutation
方法名|
|第二个参数 |Object/Array/String | 否 | |传入mutation
的参数|
** dispatch
参数说明 **
|参数 |类型 |必填 | 默认值 |说明|
|---- | ---- | ---- | ----|----|
|第一个参数 |String | 是 | | action
方法名|
|第二个参数 |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');
}
}
});