我一直在尝试用 reactboilerplate 3.4.0 框架设置 redux-persist 5.9.1 . 我收到的错误似乎与redux-immutable有关,我无法找出正确的配置. 这是我到目前为止所做的: 1.安装NPM npm i -S redux-persist redux-p
reactboilerplate 3.4.0
框架设置
redux-persist 5.9.1
.
我收到的错误似乎与redux-immutable有关,我无法找出正确的配置.
这是我到目前为止所做的:
1.安装NPM
npm i -S redux-persist redux-persist-transform-immutable
的package.json
“redux-persist”:“^ 5.9.1”,
“redux-persist-transform-immutable”:“^ 5.0.0”,
2.在store.js中设置Redux Persist
//store.js import .... (other usual stuff) import { persistStore, persistReducer } from 'redux-persist'; import storageSession from 'redux-persist/lib/storage/session'; import immutableTransform from 'redux-persist-transform-immutable'; const persistConfig = { transforms: [immutableTransform()], key: 'root', storage: storageSession, } const rootReducers = createReducer(); // Using persistReducer not persistCombineReducer because the rootReducer is already returned by combinedReducer from redux-immutable. const persistedReducer = persistReducer (persistConfig, rootReducers) export default function configureStore (initialState = {}, history) { // other usual stuffs ... // I modified how store is created using persistedReducer const store = createStore( persistedReducer, // this line used to use createReducer() method fromJS(initialState), composeEnhancers(...enhancers), ); const persistor = persistStore(store); return { persistor, store }; // Please note, I have commented out hot reloading of reducers for now. }
3. reducers.js没有变化
4.更新App.js.
import 'babel-polyfill'; import React from 'react'; // Added below import { PersistGate } from 'redux-persist/es/integration/react'; // other usual setup // Line below used to define just store but now we are defining persistor and store const { persistor, store } = configureStore(initialState, browserHistory); // Finally, update the render method: const render = () => { ReactDOM.render( <Provider store={store}> <PersistGate persistor={persistor}> <Router history={history} routes={rootRoute} render={ applyRouterMiddleware(useScroll()) } /> </PersistGate> </Provider>, document.getElementById('app') ); };
仍然没有运气:
错误:
我想我没有正确配置不可变映射.有帮助吗?
你做的方式是正确的 documentation.问题出在这里:
const rootReducers = createReducer(); // Using persistReducer not persistCombineReducer because the rootReducer is already returned by combinedReducer from redux-immutable. const persistedReducer = persistReducer (persistConfig, rootReducers)
这个const的rootReducers = createReducer();不应该这样调用,它会触发功能.你应该像const rootReducers = createReducer;或者更好地打电话:
const persistedReducer = persistReducer (persistConfig, createReducer)
请参阅documentation,不要调用rootReducer获取触发器函数,而是将其作为变量传递.