NodeJS 无法解构属性react.js useSelector

mwecs4sa  于 2023-04-20  发布在  Node.js
关注(0)|答案(2)|浏览(130)

我遇到错误Cnnot destruct属性“status”of“(0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(...)”,因为它未定义。
我试图用“吐司”来处理来自服务器的错误,但是当我在RegisterPage.jsx中编写这段代码时,页面甚至没有为我打开。
RegisterPage.jsx

const { status } = useSelector(state => state.auth )

    useEffect(() => {
        if (status) {
            toast(status)
        }
    }, [status])

store.js

export const store = configureStore({
    reducer:{
        auth: authSlice
    },
})

authSlice.js

const initialState = {
    user: null,
    token: null,
    isLoading: false,
    status: null,
}
lymnna71

lymnna711#

您可以通过执行以下操作来解决此问题

const auth = useSelector(state => state.auth )

    useEffect(() => {
        if (auth?.status) {
            toast(auth?.status)
        }
    }, [auth?.status])

最有可能的情况是,你在严格模式下运行react,它在严格模式下渲染两次/多次。所以,在第一次渲染时,你会在这些渲染结束时收到undefined,你会得到正确的值。
此外,它运行两次/多次来检测副作用,它可以通过使其更具确定性来帮助您发现错误。

zujrkrfu

zujrkrfu2#

看起来,注册切片时出现了问题。用下面的代码更改代码并测试。
Slice.js

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

const initialState = {
    user: null,
    token: null,
    isLoading: false,
    status: null,
}

const slice = createSlice({
  name: 'authSlice',
  initialState,
  reducers: {
    getUsers(state, action) {
      const { data, meta = {} } = action.payload;
      state.users = data;
    },
  }
});

export const { authSlice } = slice;

export default slice;
const { status = 'Something' } = useSelector(state => state.auth )

state.auth没有返回任何东西。

相关问题