ssmutil
v0.2.0
Published
a simple state management library
Downloads
13
Maintainers
Readme
simple-state-management
一个简单的状态管理库
还不成熟......
Installation
npm install ssmutil
warning
- 你不能在除dispatch之外任意地方修改store的内容。
Documentation
createStore
- 创建一个仓库,参数必须为一个{},我们可以传入多个仓库。例如:
import ssmutil from "ssmutil";
let store = { store1: 1, store2: 2 };
ssmutil.createStore(store);
import ssmutil from "ssmutil";
let store = { store1: { a: 1 }, store2: { b: 2 } };
ssmutil.createStore(store);
- 我们可以传入第二个参数去控制默认 store,以及增强 dispatch(内置了 applyMiddleware)
- defaultKeyIndex 默认仓库索引,控制默认 store,在我们不传入 storeKey 时默认将会对此参数所代指的 store 操作,默认为 0,当传入索引大于当前全部仓库数量时,我们第一个为默认。
- enhancerDispatch 增强 dispatch,值为函数,接收 dispatch 为参数,返回一个 dispatch
ssmutil.createStore( { store }, { defaultKeyIndex: 0, enhancerDispatch: ssmutil.applyMiddleware({ store: [ (next) => (action, key) => { next(action, key); }, ], }), } );
- createStore 返回一个对象,我们将在下面介绍。
1) getStateCut
- key 接收一个 key 值,将返回同名仓库的 state
- 不传参数将获取默认仓库的 state,注意在使用 typescript 时不传参数会导致类型推断为a | b,你可以使用断言解决。
let store = ssmutil.createStore({ a: 1 });
store.getStateCut(); //返回1
2) createReducer
创建 Reducer
- 参数为单一函数时,将此 Reducer 赋给 默认 store
- 参数为 object 时,键为所要作用的 store 名字,值为 reducer,且为数组,可以为多个,将在 dispatch 时 forin 触发。
- 参数不为 object 时,可以传入 storeKey 作为第二个参数,以指明所要作用的 store。
- 参数不为 object 时,不传入 storeKey 时,typescript 会推断为 a|b,断言可以解决
let store = ssmutil.createStore({ a: 1 });
store.createReducer((state,action)=> void)
3) dispatch
- dispatch 在使用之前必须创建相应的 reducer
- action 所要触发的 action
- storeKey 所要作用的 store
- storeKey 在不传时作用于默认 store,并且不会触发 applyMiddleware 绑定的函数
let store = ssmutil.createStore({ a: 1 });
store.createReducer((state,action)=> void)
4) subscribe
- 第一个参数为函数,将在 dispatch 之后触发
- key 订阅同名仓库,将在 dispatch 时触发
let store = ssmutil.createStore({ a: 1 });
store.subscribe(() => {});
5) replaceReducer
- 第一个参数为旧的 reducer
- 第二个参数为新的 reducer
- 第三个参数为所要替换 store 的 key,不传为替换默认 store 下的 reducer
- 替换已经存在的 reducer,使用 a===b 做判断.
- 创建 reducer 我们允许同一函数多次创建,并且都会触发,替换时我们只会替换找到的第一个。
let store = ssmutil.createStore({ a: 1 });
let a = (state,action)=> void
let b = (state,action)=> void
store.createReducer(a)
store.replaceReducer(a,b)
applyMiddleware
创建中间件,作为 createStore 时第二个参数的 enhancerDispatch 选项值
- 参数为数组,类型如下
(next) => (action, key) => { next(action, key); };
最后一次next总是为dispatch,详细参考examples文件夹案例.