调度一个仅在第一次有效的状态,但之后就不起作用了

问题描述 投票:0回答:1

我正在研究 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]);

上面仅在第一次时工作正常,但当我第二次或下次单击时它不起作用。我在这里缺少什么。

reactjs react-redux
1个回答
0
投票

是的,原因是您已经编写了依赖于 useEffect 的错误消息,因此当您第一次分派它时,errorMessage 值将从 null 更改为某个字符串,以便 useEffect 中的代码可以工作。但是现在,当您再次单击它时, errorMessage 不会更改,因为它已经设置为您提供的消息。因此,为了使其正常工作,您可以在每次调度中包含一些随机数,或者必须为此应用一些重置机制。

© www.soinside.com 2019 - 2024. All rights reserved.