Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Redux中的重写状态_Reactjs_Redux_React Redux_Immutability_Immutable.js - Fatal编程技术网

Reactjs Redux中的重写状态

Reactjs Redux中的重写状态,reactjs,redux,react-redux,immutability,immutable.js,Reactjs,Redux,React Redux,Immutability,Immutable.js,在redux中,我理解状态是不可变的,当您创建新状态时,您实际上是在用任何新信息更新对象,然后完全重写状态 今天我有一个想法,我不知道这有多愚蠢 继续重写状态在计算上是否昂贵?我知道这是Redux的主要范例之一,但我想知道从内存和空间的角度来看这是否有意义 您可以在Redux中更改状态,但不应为此付出任何代价,因为您将使用 在普通JavaScript或任何框架中,改变对象可能会带来许多副作用,这可能会让调试非常痛苦。除非有必要变异,否则你应该选择 现在回到Redux,reducer中的函数应该是

在redux中,我理解状态是不可变的,当您创建新状态时,您实际上是在用任何新信息更新对象,然后完全重写状态

今天我有一个想法,我不知道这有多愚蠢


继续重写状态在计算上是否昂贵?我知道这是Redux的主要范例之一,但我想知道从内存和空间的角度来看这是否有意义

您可以在Redux中更改状态,但不应为此付出任何代价,因为您将使用

在普通JavaScript或任何框架中,改变对象可能会带来许多副作用,这可能会让调试非常痛苦。除非有必要变异,否则你应该选择

现在回到Redux,reducer中的函数应该是纯函数。原因如下:

通过比较上一个状态和下一个状态的内存位置,检查状态是否已更新

现在,当您在JavaScript中改变一个对象时,您只是在更新一个现有的对象,因此,内存位置保持不变,存储不会得到更新。改变状态也会禁用时间旅行到调试的一个基本功能

另一方面,如果redux在比较前一个状态(更改前的状态)和下一个状态(您发送的新状态)的内存位置时,没有更改对象,而是创建了一个新的对象,那么此时redux会意识到发生了更改,并使用您的最新状态更新存储

参考文献:

  • Redux反模式:

  • 不纯净的功能和Redux devtools的问题:

  • 什么是纯函数?

  • 为什么Redux需要还原器是“纯函数”

  • Redux开发工具: