在 redux 中,我知道状态是不可变的,当你创建新状态时,你实质上是用现有的新信息更新对象,然后完全重写状态。
今天我有一个想法,我不知道它有多愚蠢。
不断重写状态的计算成本是否昂贵?我知道这是 Redux 的主要范例之一,但我想知道从内存和空间的角度来看这是否有意义。
你可以在 Redux 中改变状态,但你不应该不惜一切代价这样做,因为你会在Redux 反模式 https://github.com/coodoo/react-redux-isomorphic-example/issues/9
在普通 JavaScript 或任何框架中,改变对象可能会带来许多副作用,这可能会导致调试非常痛苦。你应该选择纯函数 https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076bec976除非有必要变异。
现在回到 Redux,reducer 中的函数应该是纯函数。原因如下:
Redux算法 https://medium.freecodecamp.org/why-redux-needs-reducers-to-be-pure-functions-d438c58ae468通过比较前一个和下一个状态的内存位置来检查状态是否已更新。
现在,当您在 JavaScript 中改变对象时,您只是更新现有对象,因此内存位置保持不变并且存储不会更新。改变状态也会禁用一个基本功能Redux 开发工具 https://github.com/gaearon/redux-devtools,时间旅行调试。
另一方面,如果您不改变对象,而是创建一个新对象,那么当 redux 比较 previousState(更改之前的状态)和 nextState(您发送的新状态)的内存位置时,Redux 此时会意识到发生了变化,并且它会用您的最新状态更新商店。
参考:
Redux 反模式:https://github.com/coodoo/react-redux-isomorphic-example/issues/9 https://github.com/coodoo/react-redux-isomorphic-example/issues/9
Redux devtools 的不纯功能和问题:
https://github.com/coodoo/react-redux-isomorphic-example/commit/6998c46d3c1a102b5f1bfb4f9aa44e5e7f9f6e87#commitcomment-12457617 https://github.com/coodoo/react-redux-isomorphic-example/commit/6998c46d3c1a102b5f1bfb4f9aa44e5e7f9f6e87#commitcomment-12457617
什么是纯函数?
https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076bec976 https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076bec976
为什么 Redux 需要减速器是“纯函数”
https://medium.freecodecamp.org/why-redux-needs-reducers-to-be-pure-functions-d438c58ae468 https://medium.freecodecamp.org/why-redux-needs-reducers-to-be-pure-functions-d438c58ae468
Redux 开发工具:https://github.com/gaearon/redux-devtools https://github.com/gaearon/redux-devtools
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)