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