在 redux 中,我明白状态是不可变的,当你创建新状态时,你本质上是用任何新信息更新对象,然后完全重写状态。
今天我有一个想法,我不知道它有多愚蠢。
不断重写状态在计算上是否昂贵?我知道这是 Redux 的主要范式之一,但我想知道从内存和空间的角度来看这是否有意义。
在 redux 中,我明白状态是不可变的,当你创建新状态时,你本质上是用任何新信息更新对象,然后完全重写状态。
今天我有一个想法,我不知道它有多愚蠢。
不断重写状态在计算上是否昂贵?我知道这是 Redux 的主要范式之一,但我想知道从内存和空间的角度来看这是否有意义。
你可以在 Redux 中改变状态,但你不应该不惜一切代价这样做,因为你会在Redux 反模式中编码
改变对象,在普通 JavaScript 或任何框架中,可能会带来许多副作用,调试起来可能会非常痛苦。你应该选择纯函数,除非它需要改变。
现在回到 Redux,reducer 中的函数应该是纯函数。原因如下:
Redux 算法通过比较前一个状态和下一个状态的内存位置来检查状态是否已更新。
现在,当你在 JavaScript 中改变一个对象时,你只是在更新一个现有的对象,因此,内存位置保持不变,存储不会更新。改变状态也会禁用Redux devtools 的一个基本功能,时间旅行以进行调试。
另一方面,如果不是改变对象而是创建一个新对象,当redux比较previousState(你改变之前的状态)和nextState(你发送的新状态)的内存位置时,Redux此时意识到发生了变化,它会用您的最新状态更新商店。
参考:
Redux 反模式:https : //github.com/coodoo/react-redux-isomorphic-example/issues/9
Redux devtools 的不纯函数和问题:https :
//github.com/coodoo/react-redux-isomorphic-example/commit/6998c46d3c1a102b5f1bfb4f9aa44e5e7f9f6e87#commitcomment-12457617
为什么 Redux 需要 reducers 成为“纯函数”
https://medium.freecodecamp.org/why-redux-needs-reducers-to-be-pure-functions-d438c58ae468
Redux 开发工具:https : //github.com/gaearon/redux-devtools