当前位置: 首页 > 知识库问答 >
问题:

国家到底是做什么的?[副本]

巩俊远
2023-03-14

我正在试用Angular中的NgRx(redux)和下面示例中的...state,我不能完全理解。我搜索了它,并将其理解为散布,但不确定为什么接口状态中的数据属性会在reducer的开关返回{}块中重复,因为...会散布它们?有谁能帮我理解一下吗?

export interface State {
  sessionData: Map<string, string>;
  requesting: boolean;
  hasError: boolean;
  status: StatusModel;
}

export function sessionReducer(state: State = INITIAL_STATE, action: Session.Actions): State {
      switch (action.type) {
        case Session.REQUEST_SESSION_DATA:
          return {
            ...state,
            requesting: true,
            hasError: false,
            status: undefined,
          };
      }
}

附注:我看了这里的线程,通常得到的传播就是这样,传播开来。但是这里在redux/ngrx的上下文中,试图理解为什么return{}具有...state和三个附加属性。

共有1个答案

长孙修远
2023-03-14

状态的要点是它是不可变的(返回的是一个新对象,而不是一个修改过的对象)。因此,如果您想要修改状态,向它添加新的值,您需要返回当前状态加上您想要添加到前一个状态的新值。在使用扩展运算符...的示例中,您返回的是一个新的不可变对象,该对象包含以前的状态以及三个新属性requestinghaserrorstatus。您可以考虑这样做:

export function sessionReducer(state: State = INITIAL_STATE, action: Session.Actions): State {
      switch (action.type) {
        case Session.REQUEST_SESSION_DATA:
          state.requesting = true;
          state.hasError: false;
          state.status: undefined;

          return state;
      }
}

但是你不能这样做,因为你正在打破状态的哲学,新的不可变的对象而不是修改过的:)

在您的示例中,我们需要知道initial_state是如何初始化的,但我认为它只包含sessiondata属性。因此,在该示例中,您将返回sessiondata以及其余属性。

在下面的链接中,您可以看到spread运算符是Redux世界中常用的运算符,用于将当前状态返回为新对象(这是React的Redux示例,但它在Angular中的工作方式完全相同)。

在Angular中,使用redux模式和onpush更改检测策略是一种非常常见的模式,因为您告诉Angular只检查组件@input中的引用更改,而不是逐个属性比较对象。那是性能上的一大优势。

扩展算子在Redux中的应用

 类似资料:
  • 我在Angular和中试用了NgRx(redux)。在下面的示例中,我不能完全理解。我搜索了它,通常将其理解为扩展,但不确定为什么中的数据属性在简化程序的的块中重复,因为...无论如何都会扩展它们?有人能帮我理解一下吗? PS:我已经看过这里的线程,通常得到的是,扩散就是这样,扩散开来。但是在Redux/ngrx上下文中,我们试图理解为什么具有和其他三个属性。

  • 问题内容: 这是我的代码: 这是我从解释器运行输出时的结果: 如果您注意到输出,则创建巨大的列表会消耗621.5 MB,而删除它只会释放152.6 MB。当我检查文档时,我发现以下语句: 因此,我猜想它并没有删除对象本身,而只是取消了绑定。 但是,它在解除绑定方面做了什么工作,从而释放了很大的空间(152.6 MB) 。有人可以痛苦地解释我在这里发生什么吗? 问题答案: Python是一种垃圾收集

  • 我很难理解的概念,因为根据视图,它做不同的事情。根据官方的留档,这是一个 用于根据系统窗口(如状态栏)调整视图布局的布尔内部属性。如果为true,则调整此视图的填充以为系统窗口留出空间。 现在,检查class我可以看到,当设置为时,窗口会插入(状态栏、导航栏…)应用于视图填充,该填充根据上面引用的文档工作。这是守则的相关部分: 有了新的材料设计,有了新的类别,这些类别广泛地使用了这面旗帜,这就是混

  • 我知道是“最高的SDK版本,您的应用程序已知可以使用”,但这有什么意义呢?我设置了22,我的应用程序在API25设备上运行良好。这不是为了防止在更多的api版本上安装吗?如果不是,那又是为了什么呢?

  • 我对上面的代码感到困惑,其中片段有一个叫做的东西。 我不太清楚setArguments(args)到底是做什么的,我也想知道getArguments()方法是做什么的,因为我在查看开发人员时看到了它。Android通用域名格式。