最近项目做多页面应用使用到了,react + webpack + redux + antd去构建多页面的应用,本地开发用express去模拟服务端程序(个人觉得可以换成dva).所以在这里吐槽一下我自己对于redux的一些见解。
Redux是状态管理的服务,可以当作是mvc中的controller层,你也可以把它认为是mvvm中vm层。虽然它本身受到Flux的影响很大,但是它的核心概念缺很简单,就是Redue也就是ES5中Array.prototype.reduce,这个reduce用于合并数组的元素,例:
Redux认为,一个应用程序中,所有的应用模块之间需要共享访问的数据,都应该在Store的State里面。这点和React的state和props的概念是一致的。外面的props尽量不去改变,而改变的只是内部的状态state,而有shouldComponentUpdate这个生命周期函数,我们可以优化react.
但是有一个原则是没有改变的,就是在你不知道你是否需要redux的时候,你肯定是不需要它。就像Flux的作者说的那样,Flux就像眼镜,你会知道你在什么时候需要它。
下面介绍一些本人对于redux的一些使用经验:
(1)你最好保证State的没个节点都是immutable的,这样确保在消费State的时候只需要进行简单的引用就可以了。从而避免Deep Equal 的遍历过程。也就是说你的state最好是键值的对象形式,避免数组形式的非state最底层值的形式。
(2)reducer为纯函数,如果判断太多,可以使用combineReducers(),去组合reducer,分离reducer
(3)合理管理你的state.并不需要所有的数据都在State里面,虽然这也是可以,总之一句话,合适你的才是最好的,适用需要的代码才是最好的。
(4)建议所以的asyncAction都应该被管理。这很大程度上,可以提高用户体验。建议适用Promise async/await 去实现异步的管理。