阅读到这里http://camsong.github.io/redux-in-chinese/docs/basics/Reducers.html
注意:
不要修改 state。 使用 Object.assign()
新建了一个副本。不能这样使用 Object.assign(state, { visibilityFilter: action.filter })
,因为它会改变第一个参数的值。一定要把第一个参数设置为空对象。也可以使用 ES7 中还在试验阶段的特性 { ...state, ...newState },参考 对象展开语法。
在 default 情况下返回旧的 state。遇到未知的 action 时,一定要返回旧的 state。
应该不是不可以,而是强烈不建议这么做吧。这应该与React
推崇的immutability
有关。
在其他framework如angular
中,侦知一个变量变化通过watch
和deepwatch
,尤其deepwatch
在判断一个数据量大的变量是否变化时会消耗很多资源,导致应用性能下降。
在React
中,通过“有变化,就一定返回一个新对象;没变化,原对象不做变化直接返回”的原则,永远可以通过判断“新旧变量是否对同一内存内容的引用”来侦测变化,效率上比deepwatch
高得多
如果直接在State上修改的话,Redux是没办法检测出state的变化的,组件也不会更新。