Реагируйте с redux-persist, когда навигация в пользовательском интерфейсе застряла

Когда я перемещаюсь по приложению, пользовательский интерфейс застревает, хотя URL-адрес меняется.

Я хотел бы добавить в свое текущее приложение redux-persist, но в итоге это привело меня к странной ошибке.

Примечание: я также использую Redux-Saga в качестве промежуточного программного обеспечения при создании магазина.

store.js

import { createStore, applyMiddleware, compose } from 'redux'
import { persistStore, persistReducer } from 'redux-persist'
import storage from 'redux-persist/lib/storage' // defaults to localStorage for web and AsyncStorage for react-native

import createSagaMiddleware from 'redux-saga'
import rootReducer from "../reducers/index";
import rootSaga from '../sagas/index'

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

const persistedReducer = persistReducer(persistConfig, rootReducer)

const sagaMiddleware = createSagaMiddleware()

const middleware = applyMiddleware(sagaMiddleware)

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose

const store = createStore(
  persistedReducer,
  {},
  composeEnhancers(middleware)
)

export const persistor = persistStore(store)

sagaMiddleware.run(rootSaga)

export default store

window.store = store

Когда я комментирую в компоненте Persist Gate, навигация работает как задумано.

index.js

import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { BrowserRouter as Router } from "react-router-dom";
import { Provider } from 'react-redux'
import registerServiceWorker from "./js/registerServiceWorker";
import { PersistGate } from 'redux-persist/integration/react'
import store, { persistor } from './js/store';

ReactDOM.render(
  <Router>
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistor}>
        <App />
      </PersistGate>
    </Provider>
  </Router >,
  document.getElementById("root")
);
registerServiceWorker();

Надеюсь, я ясно дал понять!

1 ответ

Решение

Попробуйте обернуть Router с PersistGate, Порядок этих компонентов более высокого порядка имеет значение для React Router. Теперь, когда вы меняете URL, это не вызывает повторную визуализацию, поэтому замена ордера должна решить проблему.

Другие вопросы по тегам