现在已经完成了一个很通用的 createStore ,并且使用起来也很容易,性能也ok。重新审视一下我们代码,发现 stateChanger 第一个参数 state 就是 createStore 第一个参数的 state,两者其实都是全局变量 appState , 那么是否可以将 appState 和 stateChanger 合并到一起? 这样使用 createStore 的时候就可以不用关注 state , 也避免了无意中的 state.title.text="xxx"
这样的代码。
1 | function stateChanger(state, action) { |
这时 stateChanger 就同时拥有了初始化和修改 state 的能力,如果有传入 state 就生成更新数据,否则就是初始化数据。
现在可以优化 createStore 为一个参数,将原来的参数 state 变为一个局部遍历,在完成 createStore 的操作之前,通过触发一个空操作,完成局部变量 state 的初始化。
1 | function createStore(stateChanger) { |
现在我们就拥有了一个最终形态的 createStore , 它接收一个可以根据 action
修改 state 的函数,这个函数是一个不依赖外部数据,并且没有副作用的纯函数(Pure Function),现在我们把 stateChanger 改为 reducer 就完全符合 redux 的 api 了。
完整代码:
1 |
|