简体   繁体   English

State 更改为未定义值。 我正在使用带有 redux-persist 的 redux-toolkit

[英]State changing to undefined value. I'm using redux-toolkit with redux-persist

I'm trying change my state in the login reducer, but after the state.user = data.user operation, the console.log prints undefined .我正在尝试在登录减速器中更改我的 state,但是在state.user = data.user操作之后, console.log打印undefined

My authSlice:我的授权切片:

import { createSlice } from '@reduxjs/toolkit';
import api from '../../config/api';

const authSlice = createSlice({
  name: 'auth',
  initialState: {
    user: null,
    token: '',
  },
  reducers: {
    async register(state, action) {
      console.log(action);
      await api
        .post('users', action.payload)
        .then(({ data }) => {
          state = data.data;
          console.log(state);
        })
        .catch((err) => {
          console.log(err);
        });
    },
    async login(state, action) {
      try {
        const { data } = await api.post('sessions', action.payload);
        console.log(state);
        state.user = data.user;
        console.log(state);
        state.token = data.token;
      } catch (err) {
        console.log(err.response && err.response.data.error);
      }
    },
  },
});

const { actions, reducer } = authSlice;

export const { register, login } = actions;
export default reducer;

My store:我的店铺:

import {
   configureStore,
   combineReducers,
   getDefaultMiddleware,
 } from '@reduxjs/toolkit';
 import { AsyncStorage } from 'react-native';
 import {
   persistReducer,
   persistStore,
   FLUSH,
   REHYDRATE,
   PAUSE,
   PERSIST,
   PURGE,
   REGISTER,
 } from 'redux-persist';

 import { authReducer, newsReducer } from '../features';

 const rootReducer = combineReducers({
   authReducer,
   newsReducer,
 });

 const persistConfig = {
   key: 'root',
   storage: AsyncStorage,
   whitelist: ['auth'],
 };

 const persistReducers = persistReducer(persistConfig, rootReducer);

 const store = configureStore({
   reducer: persistReducers,
   middleware: getDefaultMiddleware({
     serializableCheck: {
       ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
     },
   }),
 });

 export const persistor = persistStore(store);

 export default store;

In addition, when I configure my middleware property from configureStore to另外,当我将我的中间件属性从 configureStore 配置为

middleware: getDefaultMiddleware({
    serializableCheck: {
      ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
    },
}),

That prints the following error in my console:这会在我的控制台中打印以下错误:

图片

I haven't used Redux' toolkit/ createSlice() myself, but they have a whole section on async thunks: https://redux-starter-kit.js.org/api/createAsyncThunk我自己没有使用过 Redux 的工具包/ createSlice() ,但他们有一整节关于异步 thunk: https://redux-starter-kit.js.org/api/createAsyncThunk

Ie you dispatch() async functions (actions, which triggers side effects), and don't perform side effects in reducers (and they shouldn't be async).即你dispatch()异步函数(触发副作用的动作),并且不在减速器中执行副作用(它们不应该是异步的)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM