大叔爱吃猕猴桃 使用 redux 有哪些原则? 核心描述 单一数据源:整个应用的全局 state 被存储在一棵 object tree 中,并且这个 object tree 只存在于唯一一个 store 中。 State 是只读的:唯一改变 state 的方法就是触发 action,action 是一个用于描述已发生事情的普通对象。 使用纯函数来执行修改:为了描述 action 如何改变 state tree,你需要编写纯的 reducers。 知识拓展 什么时候应该使用 redux: 在应用的大量地方,都存在大量的状态 应用状态会随着时间的推移而频繁更新 更新该状态的逻辑可能很复杂 中型和大型代码量的应用,很多人协同开发 reducer 是一个函数,接收当前的 state 和一个 action 对象,必要时决定如何更新状态,并返回新状态。reducer 必须符合以下规则: 仅使用 state 和 action 参数计算新的状态值 禁止直接修改 state。必须通过复制现有的 state 并对复制的值进行更改的方式来做不可变更新 禁止任何异步逻辑、依赖随机值或导致其他副作用代码 reducer 遵守上述规则的原因: redux 的目标之一是使代码可预测。当函数的输出仅根据输入参数计算时,更容易理解该代码的工作原理并对其进行测试 如果一个函数依赖于自身之外的变量,或者随机行为,你永远不知道运行它时会发生什么 如果一个函数 mutate 了其他对象,比如它的参数,这可能会意外地改变应用程序的工作方式。这可能是错误的常见来源 不可变更新(Immutability),不能在 Redux 中更改 state 的原因: 会导致bug,例如 UI 未正确更新以显示最新值 更难理解状态更新的原因和方式 编写测试变的困难 打破了正确使用“时间旅行调试”的能力 违背了 Redux 的预期精神和使用模式