redux 即使reducer setSignupData成功运行,状态更新也会失败,signupData仍然为null,为什么?

o8x7eapl  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(102)

我正在更新signupData的状态,但更新后它仍然显示null

import { createSlice } from "@reduxjs/toolkit";

const initialState = {
  signupData: null,
};

const authSlice = createSlice({
  name: "auth",
  initialState: initialState,
  reducers: { 
    setSignupData(state, value) {
      console.log("payload:",value.payload)
      state.signupData = value.payload;
    },
  },
});

export const { setSignupData } = authSlice.actions;

export default authSlice.reducer;
dispatch(setSignupData(userSignUpData));
console.log("user signup data", userSignUpData)
console.log("sign up data set to :", signupData)

可以看到,payload和用户注册数据具有有效值,但在状态更新后注册数据仍然是null
signupData value

bq3bfh9z

bq3bfh9z1#

问题

这看起来只是一个过时的闭包问题,在函数回调中,从存储区选择的signupData状态上,调用一个动作来更新状态。

陈旧与当前状态访问演示

建议方案

您有几个选项来访问当前状态:
1.使用useEffect钩子和状态依赖项来记录值或发出任何其他有意的副作用。

const signupData = useSelector(/* selector function */);

...

useEffect(() => {
  console.log("sign up data set to:", signupData);
}, [signupData]);

...

1.导入store对象并调用store.getState()访问当前状态。

import store from '../path/to/store';

...

const someCallback = ( .... ) => {
  ...
  dispatch(setSignupData(userSignUpData)); // <-- dispatch action
  const state = store.getState();          // <-- get current state
  const signupData = state....signupData;

  console.log("user signup data", userSignUpData);
  console.log("sign up data set to:", signupData);
  ...
};

如果你真的想做的只是检查/验证/验证状态是否因调度操作而更新,那么你应该确保你没有禁用Redux-DevTools,并安装了允许你检查商店的浏览器扩展。

相关问题