我是 Redux 的新手 - 我真的很想了解使用函数式编程使单向数据更加优雅的全局。
在我看来,每个减速器都采用旧状态,创建一个新状态而不改变旧状态,然后将新状态传递给下一个减速器以执行相同的操作。
我知道不造成副作用可以帮助我们获得单向数据流的好处。
我真的不明白不改变旧状态有什么重要的。
我唯一能想到的可能是我读过的“时间旅行”,因为如果你坚持每一种状态,你就可以执行和“撤消”。
问题:
还有其他原因导致我们不想在每一步都改变旧状态吗?
如果处理得当,使用不可变数据结构可以对性能产生积极影响。就 React 而言,性能通常是指在数据未更改的情况下避免应用程序不必要的重新渲染。
为此,您需要将应用程序的下一个状态与当前状态进行比较。如果状态不同:重新渲染。否则不要。
要比较状态,您需要比较状态中的对象是否相等。在普通的旧 JavaScript 对象中,您需要进行深度比较才能查看对象内的任何属性是否发生了变化。
对于不可变的对象,你不需要它。
immutableObject1 === immutableObject2
基本上就可以了。或者如果您使用像 Immutable.js 这样的库Immutable.is(obj1, obj2)
.
就反应而言,您可以将其用于shouldComponentUpdate
方法,就像流行的PureRenderMixin
does.
shouldComponentUpdate(nextProps, nextState) {
return nextState !== this.state;
}
当状态没有改变时,此函数可以防止重新渲染。
我希望这有助于不可变对象背后的推理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)