Redux完全取代状态而不是每次都改变它的理念是什么?

时间:2017-03-23 06:39:32

标签: redux react-redux

我听说以这种方式进行测试更好,但我不明白为什么。每当某些事情发生变化而不是改变现有的状态时,它有什么作用来建立一个新的状态?它更快吗?

2 个答案:

答案 0 :(得分:1)

不,它不快。直接改变状态通常会更快。

返回一个新的状态使得reducer更容易测试和预测(因为没有副作用)  我们可以防止一些意外的行为发生。例如,如果您正在使用PureComponent并且直接改变状态,则您的组件可能无法按预期更新,因为PureComponent使用===来比较道具。

考虑下面的代码,我们试图呈现一个列表:

// current state
const list = ['foo', 'bar']

// we mutate the state directly
list[1] = 'hihi'

// in shouldComponentUpdate of a PureComponent
props.list === nextProps.list // true

在这种情况下,组件将不会知道更新。

除了PureComponent之外,react-redux中还有一些优化依赖于此约定。

答案 1 :(得分:0)

在问题上阅读Redux docs,但基本上它会使每次更新更具可预测性,这使得从测试到渲染的所有内容都更加简单。