首页 > 解决方案 > 动作永远不会到达减速器?

问题描述

我在我的应用程序中添加了一个新的减速器。为了测试它是否有效,我只是想将它与一个动作挂钩。但是,当调用此操作时,我在我的 devTools 中看到它正确执行,但它永远不会到达减速器。我正在使用 redux persist v6 并认为问题出在某个地方,我的应用程序非常错误,因为我试图坚持多个减速器。

我的商店:

const todoPersistConfig = {
  key: 'TodoReducer',
  storage: AsyncStorage,
  whitelist: ['todos'],
  stateReconciler: autoMergeLevel2
};

const storageConfig = {
  key: 'StorageReducer',
  storage: AsyncStorage,
  whitelist: ['IDs'],
  stateReconciler: autoMergeLevel2
};

const rootPersistConfig = {
  key: 'root',
  storage: AsyncStorage,
  whitelist: ['TodoReducer', 'StorageReducer'],
  stateReconciler: autoMergeLevel2
};

const reducers = combineReducers({
  ModalReducer,
  StorageReducer: persistReducer(storageConfig, StorageReducer),
  TodoReducer: persistReducer(todoPersistConfig, TodoReducer),
  AuthReducer
});

const persistedReducer = persistReducer(rootPersistConfig, reducers);

export default function storeConfiguration() {
  const store = createStore(
    persistedReducer,
    {},
    composeEnhancers(
      applyMiddleware(ReduxThunk)
    )
  );

  const persistor = persistStore(store);

  return { persistor, store };
}

我的存储减速器:

import ADD_NOTIFICATION_ID from '../actions/types';

const initialState = {
  IDs: []
};

const storage = (state = initialState, action) => {
  switch (action.type) {
    case ADD_NOTIFICATION_ID:
      console.log('called on');
      return {
        ...state,
        IDs:
        [
          ...state.IDs,
          {
            itemID: action.item.id,
            reminderType: action.reminderType,
            notificationID: action.notificationID
          }
        ]
      };
    default:
      return state;
  }
};

export default storage;

正确调用的动作:

export const addNotificationID = (item, reminderType, notificationID) => {
  return {
    type: ADD_NOTIFICATION_ID,
    notificationID,
    item,
    reminderType
  };
};

之前我有这个动作去另一个减速器,但它被窃听了,所以我试图制作一个新的并重新开始。但是现在,我在减速器中的控制台日志甚至在操作发生时都不会触发。它没有到达减速器。

标签: javascriptreactjsreact-nativeredux

解决方案


自从我上次查看 redux-persist 已经有一段时间了,但我怀疑这条线可能是个问题

const persistedReducer = persistReducer(rootPersistConfig, reducers);

如果您要持久化子减速器,那么您不需要也持久化整个商店。


推荐阅读