编辑:在过去的 12 个多小时内,我已经对该文件的几乎所有可能的内容进行了广泛的测试。我已经多次删除了我的每个node_modules(它是一个monorepo)并重新安装了它们。我已注释掉并调试了此文件中的所有内容。
当您删除持久化的减速器时,一切都有效,并且不适用于持久化的减速器。 我认为这不应该像现在这样被否决 - 这不是一个低努力的问题 - 这可能是由于 redux-persist 的问题,这是一个较旧但仍然非常流行的库,尚未得到维护,并且很难找到解决方案
我现在还编辑了该文件,以最简化的方式重现该问题,但其核心与我在原始帖子中提到的问题相同 - redux-persisted reducer
注意,我删除了默认设置中包含的几项内容:
https://redux-toolkit.js.org/usage/usage-guide#use-with-redux-persist
降低示例的复杂性。如果需要,我可以提供完整的 store.js 文件,但人们似乎觉得它对于故障排除来说过于复杂。
"@reduxjs/toolkit": "^2.2.6",
"react": "18.2.0",
"react-native": "0.72.10",
"redux": "^4.2.1",
"redux-api-middleware": "^3.2.0",
"redux-mock-store": "^1.5.4",
"redux-persist": "^6.0.0",
"redux-persist-expire": "^1.1.0",
"redux-persist-transform-immutable": "^5.0.0",
"redux-saga": "^1.3.0",
还有商店:
import { configureStore } from '@reduxjs/toolkit';
import AsyncStorage from '@react-native-async-storage/async-storage';
import {
persistStore,
persistReducer,
} from 'redux-persist';
import rootReducer from 'reducers/rootReducer';
const persistConfig = {
key: 'root',
storage: AsyncStorage,
};
const persistedReducer = persistReducer(persistConfig, rootReducer);
export const makeStore = () => {
const store = configureStore({
reducer: persistedReducer,
});
return store;
};
export const store = makeStore();
export const persistor = persistStore(store);
所以如果我改变这一行:
reducer: persistedReducer,
至此行:
reducer: rootReducer,
并删除这一行:
export const persistor = persistStore(store);
一切正常
但无论出于何种原因,我生成的减速器总是在 redux persist 的情况下未定义。如果没有 redux persist,就不会出现这样的问题
这是由于 Redux 的最新版本添加了 isAction 用于打字。从 4.2.1 更新到 5.0.1 解决了该问题(我通常会避免在几次迭代中更新到主要修订版更新,以防止潜在的兼容性问题和早期采用者错误)