我在UI中执行一个函数(单击),进行API调用。如果调用失败,我将在有效负载中发送带有错误消息的ngrx操作。我使用reducer在状态中存储此错误。在UI中,只要状态中的错误发生变化,我就会显示弹出窗口。现在,当返回的2个连续错误消息相同时,状态将以相同的值更新两次。所以,显然,第二次状态没有变化。所以,我没有弹出第二条错误消息。但是,每次出现错误信息时我都需要弹出窗口。
这是否可以在不调度新操作的情况下执行,该操作将在确认弹出窗口时清除错误消息。我不想仅仅为了清除状态中的错误消息而创建新操作。
答案 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};
...
}
}