1
4

1 回答 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 回答