我听说以这种方式进行测试更好,但我不明白为什么。每当某些事情发生变化而不是改变现有的状态时,它有什么作用来建立一个新的状态?它更快吗?
答案 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,但基本上它会使每次更新更具可预测性,这使得从测试到渲染的所有内容都更加简单。