Reducer 基础概念
就像 Reducers 中描述的一样, R reducer 需要具备:
应该有类似 (prevsState, action) => newState 特征的,的类型与 这个很相似。
应该是"纯",纯意味着不能突变(原文 mutate,意指直接引用所指向的值)它的参数,如果在中执行 API ,或者在外部值,又或者非纯比如 Date.() 或 Math.random(),那么就会带来一些副作用。这意味着 state 的更新应该在"不可变(immutable)"的理念下完成,这就是说总是去返回新的更新后的对象,而不是直接去原始的 state tree。
突变是一种不鼓励的做法,因为它通常会打乱调试的过程,以及 React R 的 connect :
对于调试过程, R DevTools 期望重放 action 记录时能够 state 值,而不会改变任何其他的状态。突变或者异步行为会产生一些副作用,可能使调试过程中的行为被替换,导致破坏了应用。
对于 React R connect 来说,为了确定组件(component)是否需要更新,它会检查从 mapStateToProps 中返回的值是否发生改变。为了提升,connect 使用了一些依赖于不可变 state 的。并且使用浅引用(shallow reference)来检测状态的改变。这意味着直接对象或者数组是不会被检测到的并且组件不会被重新渲染。
其他的副作用像在 reducer 中唯一的 ID 或者时间戳时也会导致的不可预测并且难以调试和测试。
因为上面这些规则,在去学习具体的组织 R reducer 的技术之前,了解并完全理解下面这些核心概念是十分重要的。
核心概念:
理解 state 和 state shape
通过拆分 state 来确定各自的更新职责(reducer 组合)
高阶 reducers
定义 reducer 的初始化状态
阅读列表:
核心概念:
副作用
纯
如何理解组合
阅读列表:
核心概念:
可变与不可变
安全地以不可变的方式更新对象和数组
避免在和语句中突变 state
阅读列表
核心概念:
的组织结构
拆分相关/嵌套数据到单独的表中
为每个被赋值的对象都存储单独的标识
通过 ID 引用对象
通过对象 ID 来查找表,通过一组 ID 来记录顺序
通过关系来联系各个对象
阅读列表: