Reducers 指定了应用状态的变化如何响应
actions并发送到 store 的 ,记住actions只是描述了有事情发生这一事实,并没有描述如何更新 state!!!
<1> action 处理
reducer 就是一个纯函数,接收(旧的 state 和 action type),然后返回新的 state 。
(preState , action) => newState;
注意1: 要保持 reducer 纯净,永远不要在 reducer 函数中做以下操作:
- 修改传入的参数,如 state ,返回新的 state ,不是修改原来的 state!!
- 执行有副作用的操作,如 请求API 和 路由跳转!!
- 调用非纯函数,如 Date.now() 、Math.random()
注意2: 在 default 情况下返回旧的 state ,即遇到未知 action 时,要返回旧的 state!!
<2> 处理多个action -- 拆分 reducer
当遇到要处理很多个 action 的情况时,如果把所有的 action 都写进同一个 reducer 就会显得逻辑不清晰,且该 reducer 函数会十分冗长,这时候就需要我们进行
reducer的拆分!!
-
每个reducer只负责管理全局 state 中它负责的一部分。每个 reducer 的 state 参数都不同,分别对应它管理的部分 state 数据!!
- 随着应用的膨胀,我们还可以将拆分后的 reducer 放到不同的文件中,以保持其独立性并用于专门处理不同的数据域!! -
最后再由 Redux 提供的
combineReducers()[参数为 reducer对象] 工具来把所有的 reducer 合并成一个主reducer ,传给创建 store 的函数!!