Redux 为什么减速机必须返回新状态?

Redux 为什么减速机必须返回新状态?,redux,Redux,为什么reducer必须返回新状态原因是什么?为什么我们不能返回更新的状态?这是我们必须遵循的模式还是什么?请让我知道ngrx和redux是完全不同的吗 在两个库中,它们都返回新修改的状态或原始状态 只是浏览一下和的官方文件 NGRX减速器 NgRx中的减速器负责处理应用程序中从一个状态到下一个状态的转换 减速器函数是纯函数,因为它们为给定的输入生成相同的输出。它们没有副作用,可以同步处理每个状态转换。每个reducer函数采用最新调度的操作,即当前状态,并确定是返回新修改的状态还是原始状态 R

为什么reducer必须返回新状态原因是什么?为什么我们不能返回更新的状态?这是我们必须遵循的模式还是什么?请让我知道ngrx和redux是完全不同的吗

在两个库中,它们都返回新修改的状态或原始状态

只是浏览一下和的官方文件

NGRX减速器

NgRx中的减速器负责处理应用程序中从一个状态到下一个状态的转换

减速器函数是纯函数,因为它们为给定的输入生成相同的输出。它们没有副作用,可以同步处理每个状态转换。每个reducer函数采用最新调度的操作,即当前状态,并确定是返回新修改的状态还是原始状态

Redux减速机

缩减器指定应用程序的状态如何响应发送到存储的操作而改变

不管状态管理模式如何,您都需要通过还原器更改状态,因为操作是存储的负责fpr信息源。它们是在
NgRx
和“redux”中以及在
Vuex
中与store交互的入口点

根据状态管理库的实现,我猜它们都遵循相同的操作原则,即异步更新状态。可能有一些,它们可能有不同的特征


希望这有帮助

这两个库的目标都是管理一个只以特定的预定义方式操作的状态;减速器是它们提供给国家的通道

通过限制直接操纵国家的能力,他们更容易理解特定国家是如何达到的;通过再次调度相同的操作始终可以到达特定的状态,而给定的状态只能作为调度到状态的操作的结果来达到(至少,这是理想的-不纯*还原剂可能会导致从相同的操作到达不同的状态)

如果我们想象一个允许函数操作状态的状态管理器,这是返回原始状态的变异版本所需的,那么理解给定状态是如何达到的将困难得多,因为存储可以在任何点被任何函数操作

对redux背后的关键思想进行了很好的概述,并解释了redux为什么会这样做。以下是您的问题的相关部分:


状态为只读

改变状态的唯一方法是发出一个动作,一个描述发生了什么的对象

这确保了视图和网络回调都不会直接写入状态。相反,它们表达了改变国家的意图。因为所有的变化都是集中的,并且以严格的顺序一个接一个地发生,所以没有微妙的种族条件需要注意。由于操作只是普通对象,因此可以对其进行记录、序列化、存储,并在以后出于调试或测试目的进行回放


使用纯功能进行更改

要指定如何通过操作转换状态树,可以编写纯还原器

减缩器只是纯函数,它接受前一个状态和一个动作,然后返回下一个状态。记住返回新的状态对象,而不是改变以前的状态。您可以从一个简化程序开始,随着应用程序的增长,将其拆分为更小的简化程序,以管理状态树的特定部分。因为缩减器只是函数,所以您可以控制调用它们的顺序,传递额外的数据,甚至为分页等常见任务创建可重用的缩减器


我对ngrx的经验要少得多,尽管它看起来像是一家受redux启发的商店,我认为它或多或少遵循相同的原则。我很高兴被证明是错的,在这种情况下,我可以更新这个答案


*不纯函数将执行以下一项或多项操作:

  • 除传递的参数以外的访问状态
  • 操纵传递的参数
  • 包含副作用-影响自身之外状态的东西

  • 我认为,因为视图层需要比较当前状态和以前的状态,所以它们应该是不同的对象。此外,它还可以支持调试、时间旅行等其他功能。

    是的,这是您必须遵循的模式。在redux中,由于一些不同的原因,状态是不可变的。他们甚至在他们的文档中有一个关于它的部分!