我正在研究 ReactJs,这对我来说是新的。我正在调度一个正在第一次更新的状态,但是当我尝试第二次或第三次调度它时它不起作用,下面是我的代码,
减速机代码 -
const initialState = {
errorMsg: null,
successMsg: null,
}
export const TempReducer = createSlice({
name: 'TEMP_DATA',
initialState,
reducers: {
SetErrorMsg: (state, action) => {
state.errorMsg = action.payload;
},
SetSuccessMsg: (state, action) => {
console.log("In Reducer :", action);
state.successMsg = action.payload;
},
},
});
我正在单击按钮时调度事件 -
const handleSubmit = () => {
dispatch(
SetErrorMsg("This is error message")
);
}
基于
errorMsg
或 successMsg
我正在显示通知
const errorMsg = useSelector(tempState)?.errorMsg;
const successMsg = useSelector(tempState)?.successMsg;
useEffect(() => {
console.log("Error : ", errorMsg, "Success :",
successMsg);
} [errorMsg, successMsg]);
上面仅在第一次时工作正常,但当我第二次或下次单击时它不起作用。我在这里缺少什么。
是的,原因是您已经编写了依赖于 useEffect 的错误消息,因此当您第一次分派它时,errorMessage 值将从 null 更改为某个字符串,以便 useEffect 中的代码可以工作。但是现在,当您再次单击它时, errorMessage 不会更改,因为它已经设置为您提供的消息。因此,为了使其正常工作,您可以在每次调度中包含一些随机数,或者必须为此应用一些重置机制。