在 Redux 中重写状态
Rewriting state in Redux
在 redux 中,我知道状态是不可变的,当你创建新状态时,你实际上是在用现有的新信息更新对象,然后完全重写状态。
今天我有一个想法,我不知道它有多愚蠢。
不断重写状态在计算上是否昂贵?我知道这是 Redux 的主要范例之一,但我想知道从内存和 space 的角度来看这是否有意义。
你可以在 Redux 中改变状态,但你不应该不惜一切代价这样做,因为你会在 Redux anti-patterns
中编码
在 vanilla JavaScript 或任何框架中,改变对象可能会带来许多副作用,调试起来可能会非常痛苦。你应该选择 pure functions 除非它需要变异。
现在回到 Redux,reducer 中的函数应该是纯函数。原因如下:
Redux algorithm 通过比较前一个状态和下一个状态的内存位置来检查状态是否已更新。
现在,当您在 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 需要减速器 "pure functions"
https://medium.freecodecamp.org/why-redux-needs-reducers-to-be-pure-functions-d438c58ae468
Redux 开发工具:https://github.com/gaearon/redux-devtools
在 redux 中,我知道状态是不可变的,当你创建新状态时,你实际上是在用现有的新信息更新对象,然后完全重写状态。
今天我有一个想法,我不知道它有多愚蠢。
不断重写状态在计算上是否昂贵?我知道这是 Redux 的主要范例之一,但我想知道从内存和 space 的角度来看这是否有意义。
你可以在 Redux 中改变状态,但你不应该不惜一切代价这样做,因为你会在 Redux anti-patterns
中编码在 vanilla JavaScript 或任何框架中,改变对象可能会带来许多副作用,调试起来可能会非常痛苦。你应该选择 pure functions 除非它需要变异。
现在回到 Redux,reducer 中的函数应该是纯函数。原因如下:
Redux algorithm 通过比较前一个状态和下一个状态的内存位置来检查状态是否已更新。
现在,当您在 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 需要减速器 "pure functions"
https://medium.freecodecamp.org/why-redux-needs-reducers-to-be-pure-functions-d438c58ae468Redux 开发工具:https://github.com/gaearon/redux-devtools