ngrx:不改变状态的动作

时间:2018-06-01 17:54:00

标签: angular ngrx reducers ngrx-store

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

这是否可以在不调度新操作的情况下执行,该操作将在确认弹出窗口时清除错误消息。我不想仅仅为了清除状态中的错误消息而创建新操作。

1 个答案:

答案 0 :(得分:0)

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

这样,无论何时捕获错误,都会创建一个新的包装器对象,以强制对该state属性的相等性检查始终为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};
  ...
  }
}