3001 次
1 回答
0
===== 新答案 =====
老答案是错误的,问题后来又回来了。看起来这是 redux-persist 甚至 expo、react-native-scripts 或其他什么的问题,我无法找到问题的根源。我之前描述的行为来自 redux-persist 无法访问 AsyncStorage。然而,现在唯一有帮助的是完全停止 expo 并再次运行它,之后 redux-persist 能够再次访问 AsyncStorage。
如果根本不停止它,禁用实时重新加载似乎也确实有助于解决这个问题。
===== 旧答案 =====
我最终将 react-redux 包降级到 4.4.9 版本,看起来这已经解决了问题,否则我最初发布的代码应该完全没问题。按下按钮时自动填充状态的问题是我自己在 BE 和 FE 方面的一些错误造成的,导致商店被不同的物品填充。它们不在给定的代码中。我也稍微改变了我的商店,我不确定最初的问题是否与enhancers
组合有关。所以现在我的商店是这样的:
import { createStore, applyMiddleware } from 'redux';
import { persistStore, persistReducer } from 'redux-persist';
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';
import { AsyncStorage } from 'react-native';
import thunk from 'redux-thunk';
import promiseMiddleware from 'redux-promise-middleware';
import { createLogger } from 'redux-logger';
import { LOGOUT } from 'screens/login/LoginScreen.actions';
import appReducer from './reducers';
const middlewares = [
promiseMiddleware(),
thunk,
];
if (__DEV__) { // eslint-disable-line
middlewares.push(createLogger());
}
const rootReducer = (state, action) => {
if (action.type === LOGOUT) {
state = undefined;
}
return appReducer(state, action);
};
const persistConfig = {
key: 'root',
storage: AsyncStorage,
stateReconciler: autoMergeLevel2,
};
const persistedReducer = persistReducer(persistConfig, rootReducer);
export const store = createStore(persistedReducer, undefined, applyMiddleware(...middlewares));
export const persistor = persistStore(store);
我希望这会对某人有所帮助。
于 2018-07-22T12:20:02.037 回答