redux - 将 RTK 查询与 Redux Persistor 结合使用

标签 redux react-hooks react-redux rtk-query redux-persist

在花费了大量时间尝试单独解决这个问题之后,我想向你们寻求帮助。我已经阅读了很多与此相关的问题,但找不到任何有用的内容。我正在尝试使用 persistor 配置我的商店和RTK Query 。 这是我的 index.js 文件,我正在其中尝试配置商店

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

const persistReducers = persistReducer(persistConfig, authReducer);

const store = configureStore({
  reducer: {
    [customApi.reducerPath]: customApi.reducer,
     persistReducers,
  },

  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: {
        ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
      },
    }).concat(customApi.middleware),
});
setupListeners(store.dispatch);

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistStore(store)}>
        <App />
      </PersistGate>
    </Provider>
  </React.StrictMode>
);

这是我的RTK Query

import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
import { REHYDRATE } from "redux-persist";

export const customApi = createApi({
  baseQuery: fetchBaseQuery({ baseUrl: process.env.REACT_BASE_URL }),
  reducerPath: "customApi",
  tagTypes: ["RuralProjects"],
  endpoints: (build) => ({
    getRuralProjects: build.query({
      query: () => "projects/ruralProjects",
      providesTags: ["RuralProjects"],
    }),
  }),
});

export const { useGetRuralProjectsQuery } = customApi;

这是我的authReducer

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

const initialState = {
  user: null,
  token: null,
};

export const authSlice = createSlice({
  name: "auth",
  initialState,
  reducers: {
    setLogin: (state, action) => {
      state.user = action.payload.user;
      state.token = action.payload.token;
    },
    setLogout: (state) => {
      state.user = null;
      state.token = null;
    },
  },
});

export const { setLogin, setLogout } = authSlice.actions;
export default authSlice.reducer;

问题是没有配置 RTK Querystore我的应用程序正在运行。我的问题是如何使用 persistorRTK Query同时?任何帮助将不胜感激!

当我同时使用 redux persistor 时,如何配置商店和RTK Query

最佳答案

据我所知,代码已经同时使用 RTKQ 和 redux-persist...所以我猜测您确实想问一个不同的问题。如果我是正确的,您似乎想要合并并保留 customApi 切片以及 authSlice 状态。

import { Provider } from "react-redux";
import { configureStore, combineReducers } from "@reduxjs/toolkit";
import {
  persistStore,
  persistReducer,
  FLUSH,
  REHYDRATE,
  PAUSE,
  PERSIST,
  PURGE,
  REGISTER,
} from "redux-persist";
import { PersistGate } from "redux-persist/integration/react";
import storage from "redux-persist/lib/storage";
import authReducer from "../authSlice";
import { customApi } from "../customApi";

// Combine all slice reducers into a single root reducer
const rootReducer = combineReducers({
  [customApi.reducerPath]: customApi.reducer,
  auth: authReducer,
});

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

const reduxPersistActions = [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER];

// Persist the root reducer
const persistedReducer = persistReducer(persistConfig, rootReducer);

const store = configureStore({
  reducer: persistedReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: {
        ignoredActions: [...reduxPersistActions],
      },
    }).concat(customApi.middleware),
});

setupListeners(store.dispatch);

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistStore(store)}>
        <App />
      </PersistGate>
    </Provider>
  </React.StrictMode>
);

关于redux - 将 RTK 查询与 Redux Persistor 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75740751/

相关文章:

javascript - React.createRef 和 React.useRef 之间的区别?

reactjs - 由多个高阶组件引入的组件嵌套是反模式吗?

reactjs - 使用 window.FileReader REACT 上传多个文件

javascript - TypeError : action. Payload.map.size 不是一个函数

javascript - 使用扩展运算符更新不同级别的状态

reactjs - react useMemo 内存清理

reactjs - React Hook useEffect 缺少依赖项 Props

javascript - 单击react-router链接后mapPropsToState出错

css - 无法让我的 React 应用填满屏幕

reactjs - 是否可以创建 React Hook 工厂函数?