Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Angular ngrx:不';不改变状态_Angular_Ngrx_Reducers_Ngrx Store - Fatal编程技术网

Angular ngrx:不';不改变状态

Angular ngrx:不';不改变状态,angular,ngrx,reducers,ngrx-store,Angular,Ngrx,Reducers,Ngrx Store,我在UI中执行一个函数(单击)来调用API。如果调用失败,我将在有效负载中发送一个带有错误消息的ngrx操作。我使用一个减缩器将此错误存储在状态中。在UI中,每当状态中的错误发生变化时,我都会显示一个弹出窗口。现在,当返回的两条连续错误消息相同时,状态将使用相同的值更新两次。所以,很明显,在第二次实验中,状态并没有变化。所以,我没有收到第二条错误消息的弹出消息。但是,每次出现错误消息时,我都需要弹出窗口 这是否可能,而无需调度一个新操作,该操作将在确认弹出窗口时清除错误消息。我不想创建一个新操作

我在UI中执行一个函数(单击)来调用API。如果调用失败,我将在有效负载中发送一个带有错误消息的ngrx操作。我使用一个减缩器将此错误存储在状态中。在UI中,每当状态中的错误发生变化时,我都会显示一个弹出窗口。现在,当返回的两条连续错误消息相同时,状态将使用相同的值更新两次。所以,很明显,在第二次实验中,状态并没有变化。所以,我没有收到第二条错误消息的弹出消息。但是,每次出现错误消息时,我都需要弹出窗口


这是否可能,而无需调度一个新操作,该操作将在确认弹出窗口时清除错误消息。我不想创建一个新操作来清除状态中的错误消息

我能想到的最简单的方法是将响应消息(我想是字符串值)包装到接口中

这样,每当捕获错误时,都会创建一个新的包装器对象,以强制该状态属性的相等性检查始终为false

比如:

interface ErrorWrapper {
   message: string;
}

export const string ERROR = "[Error] Something just exploded";

class ErrorCapturedAction implements Action {
  readonly type = ERROR;
  constructor(public readonly payload: ErrorWrapper){}
}

export type Actions = ErrorCapturedAction;    

interface State {
   error: ErrorWrapper | null;
}


initialState: State = {error = null};

reducer(state = initialState, action: Actions): State {
  switch(action.type){
  ...
    case ERROR:
      const error = action.payload;
      return {...state, error};
  ...
  }
}