我安装了redux-persist,现在我所有的Redux状态都返回未定义.

所有其他Redux状态以前都是有效的,但是一旦我更改为redux-persist,它们就不再有效,并返回未定义状态.我有2个复制切片,一个是UserSlice.js,另一个是modalSlice.js,我只想在UserSlice.js上保持不变

下面是我如何使用它的一个例子:

export default function LoginModal() {
  // Modal
  const isLoginOpen = useSelector((state) => state.modal.loginModalOpen);
  const isSignupOpen = useSelector((state) => state.modal.signupModalOpen);
  const isPasswordOpen = useSelector((state) => state.modal.passwordModalOpen);


<button
  onClick={() => dispatch(openLoginModal())}
  className="btn home__cta--btn"
>

这是我的店铺.js

import { configureStore } from "@reduxjs/toolkit";
import userSlice from "./userSlice";
import storage from "redux-persist/lib/storage";
import { persistReducer, persistStore } from "redux-persist";
import thunk from "redux-thunk";

const persistConfig = {
  key: "root",
  storage,
};

const persistedReducer = persistReducer(persistConfig, userSlice);

export const store = configureStore({
  reducer: persistedReducer,
  devTools: process.env.NODE_ENV !== "production",
  middleware: [thunk],
});

export const persistor = persistStore(store);

Userslice.js:

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

const initialState = {
  email: null,
  uid: null,
  premium: false,
  type: "Basic",
  currentUser: null,
};

const userSlice = createSlice({
  name: "user",
  initialState,
  reducers: {
    setCurrentUser: (state, action) => {
      state.currentUser = action.payload;
    },
    signOutUser: (state) => {
      state.email = null;
      state.uid = null;
      state.premium = false;
    },
    typeOfSubIsYearly: (state) => {
      state.type = "Premium Plus";
    },
    typeOfSubIsMonthly: (state) => {
      state.type = "Premium";
    },
    setPremiumStatus: (state, action) => {
      state.premium = action.payload;
    },
  },
});

export const {
  setCurrentUser,
  signOutUser,
  upgradeUser,
  typeOfSubIsYearly,
  typeOfSubIsMonthly,
  setPremiumStatus,
} = userSlice.actions;

export default userSlice.reducer;`

下面是我的app.js:

import "@/styles/globals.css";
import { library } from "@fortawesome/fontawesome-svg-core";
import {
  faCrown,
  faStar,
  faStarHalf,
  faUser,
  faX,
} from "@fortawesome/free-solid-svg-icons";
import { Provider } from "react-redux";
import { persistor, store } from "@/redux/store";
import { PersistGate } from "redux-persist/integration/react";

library.add(faCrown, faStar, faStarHalf, faUser, faX);

export default function App({ Component, pageProps }) {
  return (
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistor}>
        <Component {...pageProps} />
      </PersistGate>
    </Provider>
  );
}

推荐答案

代码不包括处于Redux状态的ModalSlice减速器,因此state.modal未定义.如果您希望持久化102用户状态,那么可以通过几种方式配置持久化.

  1. 使用whitelist/blacklist排除/包括州的特定部分.

    import { configureStore } from "@reduxjs/toolkit";
    import userReducer from "./userSlice";
    import modalReducer from "./modalSlice";
    import storage from "redux-persist/lib/storage";
    import { persistReducer, persistStore } from "redux-persist";
    import thunk from "redux-thunk";
    
    const persistConfig = {
      key: "root",
      storage,
      whitelist: ["user"], // only modal will be persisted
    };
    
    const rootReducer = {
      user: userReducer,
      modal: modalReducer,
    };
    
    const persistedReducer = persistReducer(persistConfig, rootReducer);
    
    export const store = configureStore({
      reducer: persistedReducer,
    });
    
    export const persistor = persistStore(store);
    
  2. 仅持久化用户切片.

    import { configureStore } from "@reduxjs/toolkit";
    import userReducer from "./userSlice";
    import modalReducer from "./modalSlice";
    import storage from "redux-persist/lib/storage";
    import { persistReducer, persistStore } from "redux-persist";
    import thunk from "redux-thunk";
    
    const persistConfig = {
      key: "user",
      storage,
    };
    
    const persistedUserReducer = persistReducer(persistConfig, userReducer);
    
    const rootReducer = {
      user: persistedUserReducer,
      modal: modalReducer,
    };
    
    export const store = configureStore({
      reducer: rootReducer,
    });
    
    export const persistor = persistStore(store);
    

Javascript相关问答推荐

积分计算和 colored颜色 判断错误

使用axios.获取实时服务器时的404响应

如何才能拥有在jQuery终端中执行命令的链接?

将2D数组转换为图形

为什么当我解析一个promise时,输出处于挂起状态?

v—自动完成不显示 Select 列表中的所有项目

更改预请求脚本中重用的JSON主体变量- Postman

将内容大小设置为剩余可用空间,但如果需要,可在div上显示滚动条

如何将未排序的元素追加到数组的末尾?

变量在导入到Vite中的另一个js文件时成为常量.

钛中的onClick事件需要在两次点击之间等待几秒钟

在VS代码上一次设置多个变量格式

Cherrio JS返回父div的所有图像SRC

我怎样才能得到一个数组的名字在另一个数组?

为什么我不能使用其同级元素调用和更新子元素?

按特定顺序将4个数组组合在一起,按ID分组

如何按区域进行过滤并将其从结果数组中删除?

正在发出错误的URL请求

观察子组件中的@Output事件emits 器?

对象作为react 子对象无效(已找到:具有键的对象{type,props}).如果要呈现一个子级集合,请改用数组