首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用redux-toolkit配置redux-persist?

如何使用redux-toolkit配置redux-persist?
EN

Stack Overflow用户
提问于 2020-09-06 15:30:46
回答 3查看 13.1K关注 0票数 15

我已经使用传统的react-redux设置配置了redux-persist,如下所示:

代码语言:javascript
复制
onst persistConfig = {
  key: 'root',
  storage,
  whitelist: ['todos'],
};

const persistedReducer = persistReducer(persistConfig, reducer);

const store = createStore(
  persistedReducer,
  window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);

const persistor = persistStore(store);

// wrapper
const StateProvider = ({ children }) => {
  return (
    <Provider store={store}>
      <PersistGate loading={<div>Loading...</div>} persistor={persistor}>
        {children}
      </PersistGate>
    </Provider>
  );
};

但是,如何使用redux-toolkit对其进行配置?到目前为止,我已经尝试过了:

代码语言:javascript
复制
const persistedReducer = persistReducer(persistConfig, todoreducer);
const store = configureStore({
  reducer: {
    todos: persistedReducer,
  },
});

const persistor = persistStore(store);

// wrapper
const StateProvider = ({ children }) => {
  return (
    <Provider store={store}>
      <PersistGate loading={<div>Loading...</div>} persistor={persistor}>
        {children}
      </PersistGate>
    </Provider>
  );
};

但是,它不起作用。我无法通过const todos = useSelector(state => state.todos);获取todos

它返回未定义的。

EN

回答 3

Stack Overflow用户

发布于 2020-09-10 03:12:02

store.js

代码语言:javascript
复制
import {configureStore} from '@reduxjs/toolkit';
import storage from 'redux-persist/lib/storage'
import {combineReducers} from "redux"; 
import { persistReducer } from 'redux-persist'
import thunk from 'redux-thunk'

const reducers = combineReducers({
 //...            
});

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

const persistedReducer = persistReducer(persistConfig, reducers);


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

export default store;

索引/App.js

代码语言:javascript
复制
import store from './app/store';
import { PersistGate } from 'redux-persist/integration/react'
import { persistStore } from 'redux-persist'

let persistor = persistStore(store);

    <Provider store={store}>
        <PersistGate loading={null} persistor={persistor}>
        <App/>
        </PersistGate>
    </Provider>,
票数 41
EN

Stack Overflow用户

发布于 2021-07-20 21:53:25

现在在Redux Toolkit docs中有一个指南可以帮助你做到这一点,并提供清除持久化状态和使用RTK Query的建议。

它还包含一些代码,您可以复制和粘贴这些代码以忽略react-persist调度的操作类型。这将阻止它抛出错误消息(当我使用Expo运行我的React Native应用程序时,我得到了错误A non-serializable value was detected in an action, in the path: `register`. )。

在撰写本文时,他们的代码示例如下所示:

代码语言:javascript
复制
import { configureStore } from '@reduxjs/toolkit'
import {
  persistStore,
  persistReducer,
  FLUSH,
  REHYDRATE,
  PAUSE,
  PERSIST,
  PURGE,
  REGISTER,
} from 'redux-persist'
import storage from 'redux-persist/lib/storage'
import { PersistGate } from 'redux-persist/integration/react'

import App from './App'
import rootReducer from './reducers'

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

const persistedReducer = persistReducer(persistConfig, rootReducer)

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

let persistor = persistStore(store)

ReactDOM.render(
  <Provider store={store}>
    <PersistGate loading={null} persistor={persistor}>
      <App />
    </PersistGate>
  </Provider>,
  document.getElementById('root')
)
票数 6
EN

Stack Overflow用户

发布于 2020-10-03 08:18:06

我刚刚用完全相似的设置尝试了一下,它似乎起作用了。如果有用的话,我在"@reduxjs/toolkit": "^1.4.0","redux-persist": "^6.0.0""react-redux": "^7.2.1"上。HTH。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63761763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档