首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux-persist在React / connected-react-router中的实现

Redux-persist在React / connected-react-router中的实现
EN

Stack Overflow用户
提问于 2019-07-18 17:30:39
回答 1查看 348关注 0票数 0

我对连接的-react-router实现了redux-persist。起初,一切似乎都很正常。Redux存储连接到本地存储,它保存状态。但我意识到,当我打开电子邮件中的链接(http://localhost:9080/reset?token=###)重置密码时,网站只是停留在当前位置。当我尝试手动更改url时,它不起作用。

链接是有效的。当我在其他浏览器中打开该链接时,它可以正常工作。Url将被手动更改,而不设置redux-persist。

store.js

代码语言:javascript
复制
import { applyMiddleware, createStore } from 'redux';
import thunkMiddleware from 'redux-thunk';
import { createLogger } from 'redux-logger';
import { composeWithDevTools } from 'redux-devtools-extension';
import { routerMiddleware, connectRouter } from 'connected-react-router';
import createBrowserHistory from 'history/createBrowserHistory';
import { persistStore, persistReducer } from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import rootReducer from './src/reducers';

export const history = createBrowserHistory();
const middlewares = [
  routerMiddleware(history), 
  thunkMiddleware,
  createLogger({
    predicate: () => process.env.NODE_ENV === 'development',
    collapsed: true,
  }),
];
const enhancers = [applyMiddleware(...middlewares)];
const persistConfig = {
  key: 'root',
  storage,
};
const persistedReducer = persistReducer(
  persistConfig,
  rootReducer(history), 
);

export default preloadedState => {
  const store = createStore(
    persistedReducer,
    preloadedState,
    composeWithDevTools(...enhancers),
  );
  const persistor = persistStore(store);

  return { store, persistor };
};

index.js

代码语言:javascript
复制
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { ConnectedRouter as Router } from 'connected-react-router';
import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';
import { PersistGate } from 'redux-persist/lib/integration/react';
import configureStore, { history } from './store';
import Routes from './routes';
import Loading from './src/shared/loading';

const theme = createMuiTheme({
 ...
});
const { store, persistor } = configureStore();
const root = document.createElement('div');
document.body.appendChild(root);

render(
  <Provider store={store}>
    <PersistGate loading={<Loading />} persistor={persistor}>
      <MuiThemeProvider theme={theme}>
        <Router history={history}>
          <Routes />
        </Router>
      </MuiThemeProvider>
    </PersistGate>
  </Provider>,
  root,
);

我试过的东西。

我试着像下面这样添加'connectRouter‘。这似乎不会改变任何事情。我是不是应该把“connectRouter”放在店里?

代码语言:javascript
复制
const store = createStore(
  // persistedReducer,
  connectRouter(history)(persistedReducer),
  composeWithDevTools(enhancers),
);

当我使用'rootReducer‘而不是'rootReducer( history )’作为历史时,历史将与'connectRouter(history)(persistedReducer)‘复制。它将中断并显示一条错误消息:无法读取未定义的属性'location‘。

代码语言:javascript
复制
"connected-react-router": "^6.4.0"
"redux-persist": "^5.10.0"
"react": "^16.8.6"
"react-dom": "^16.8.6"
"redux": "^4.0.0"

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-20 17:53:53

使用黑名单不持久化或白名单持久化!

const persistConfig ={ key:‘根’,存储,黑名单:‘路由器’,};

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

https://stackoverflow.com/questions/57091344

复制
相关文章

相似问题

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