Redux完全替换状态而不是每次都对其进行变异背后的理念是什么?

Redux完全替换状态而不是每次都对其进行变异背后的理念是什么?,redux,react-redux,Redux,React Redux,我听说这样做更好,但我不明白为什么。它的目的是什么,在每次事物发生变化时建立一个新的状态,而不是改变已经存在的状态?它更快吗?阅读一下关于这个问题的文章,但基本上它使每次更新都更容易预测,这使得从测试到渲染的一切都变得更简单。不,它不是更快。直接改变状态通常更快 返回一个新的状态使还原器更容易测试和预测(因为没有副作用) 我们可以防止一些意外的行为发生。例如,如果您使用的是PureComponent,并且您直接改变了状态,那么您的组件可能不会按照预期进行更新,因为PureComponent使用=

我听说这样做更好,但我不明白为什么。它的目的是什么,在每次事物发生变化时建立一个新的状态,而不是改变已经存在的状态?它更快吗?

阅读一下关于这个问题的文章,但基本上它使每次更新都更容易预测,这使得从测试到渲染的一切都变得更简单。

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

返回一个新的状态使还原器更容易测试和预测(因为没有副作用) 我们可以防止一些意外的行为发生。例如,如果您使用的是
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中还有一些优化依赖于此约定。

以您为例,如果您不直接改变列表,而是使用新列表,那么新列表如何到达下一步,而旧列表如何保留道具?为什么不?Redux只是将新列表传递给组件,实际上react所做的非常简单。newProps将只分配给实例
inst.props=nextProps
,当然它会在前面调用生命周期方法,例如:
inst.shouldComponentUpdate(nextProps,nextState,nextContext)