【发布时间】:2019-12-01 19:20:21
【问题描述】:
我正在尝试在我的 React Native 应用程序上实现 Redux-persist。完全按照setup docs,我从这里更改了我的store.js:
import { applyMiddleware, createStore } from 'redux';
import * as thunkMiddleware from 'redux-thunk';
import reducers from '../reducers';
let middlewares = [thunkMiddleware.default];
const store = createStore(reducers, applyMiddleware(...middlewares));
export default store;
到这里:
import { applyMiddleware, createStore } from 'redux';
import * as thunkMiddleware from 'redux-thunk';
import { persistStore, persistReducer } from 'redux-persist';
import AsyncStorage from '@react-native-community/async-storage';
import reducers from '../reducers';
const persistConfig = {
key: 'root',
storage: AsyncStorage,
};
const persistedReducer = persistReducer(persistConfig, reducers);
let middlewares = [thunkMiddleware.default];
export default () => {
let store = createStore(persistedReducer, applyMiddleware(...middlewares));
let persistor = persistStore(store);
return { store, persistor };
};
但是现在,我收到了错误 TypeError: store.getState is not a function (In 'store.getState()', 'store.getState' is undefined)。
注意:我已经检查了许多有关 stackoverflow 的问题,都存在相同的 store.getState 错误,但它们的具体问题与我的设置不同。
编辑:提供者实现(使用 RNNv2)
import { Navigation } from 'react-native-navigation';
import { Provider } from 'react-redux';
import store from '../../shared/redux/store';
import { registerScreens } from '../view/screens';
import { initialize } from './navigation';
/**
* Register screens and components for react native navigation
*/
registerScreens({ store, Provider });
const app = () => {
Navigation.events().registerAppLaunchedListener(() => {
initialize();
});
};
export default app;
注册屏幕:
const registerComponentWithRedux = (redux: any) => (
name: string,
component: any,
) => {
Navigation.registerComponentWithRedux(
name,
() => component,
redux.Provider,
redux.store,
);
};
export function registerScreens(redux: any) {
registerComponentWithRedux(redux)(screen, screen.default);
...
}
【问题讨论】:
-
显示你的代码涉及
<Provider> -
已编辑。我使用的是 RNNv2,所以我不使用直接的
组件,而是使用提供程序来注册我的屏幕。 -
我对react-native-nav不熟悉,但是导入store的时候,就是导入导出的函数,然后传入
registerScreens({ store, Provider });,但是store不是@的输出987654330@ 它是一个函数调用,它返回一个带有键存储和持久化器的对象 -
很难 100% 了解,但我看不到文件名,试试
registerScreens({ store: store().store, Provider }); -
很高兴它起作用了,它可能已经清除了错误,但我认为你会遇到更多的错误,我建议一起查看
react-native-navigation和redux-persist周围的更多代码,尝试在PersistGate工作
标签: reactjs react-native react-redux react-native-navigation redux-persist