使用redux-persist时出现redux.isAction未定义错误,移除后恢复正常
Redux-Persist 配合 Redux Toolkit v2 出现 TypeError: redux.isAction 不是函数(值为undefined)
问题现象
触发错误:TypeError: 0, _$$_REQUIRE(_dependencyMap[15], "redux").isAction 不是函数(值为undefined)
仅在使用持久化reducer(persisted reducer)时出现该错误,移除持久化配置、直接使用rootReducer并删除persistor相关代码后,应用运行完全正常。精简代码到最小复现示例后,核心问题仍与Redux持久化reducer相关。
当前依赖版本
"@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"
复现用Store代码
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);
已验证的临时修复
将configureStore中的reducer: persistedReducer替换为reducer: rootReducer,并移除export const persistor = persistStore(store);后,应用恢复正常,但失去状态持久化功能。
问题分析与解决方案建议
- 版本兼容性问题:Redux Toolkit v2对Redux内部API做了调整,而
redux-persist@6.0.0已停止维护,未适配RTK v2的变化,导致调用了已被移除或修改的redux.isAction方法。 - 降级RTK版本:暂时将
@reduxjs/toolkit降级到v1.x系列(如^1.9.7),该版本与redux-persist@6.0.0兼容性良好,可快速解决问题。 - 检查RootReducer有效性:确认
rootReducer是正确组合的有效Redux reducer(比如通过RTK的combineReducers或createSlice生成),无效的reducer被persistReducer包装后可能触发异常。 - 替换持久化方案:由于
redux-persist已停止维护,后续会持续出现兼容性问题,建议改用RTK官方推荐的状态持久化方式,或自行基于AsyncStorage实现简单的持久化逻辑。
内容的提问来源于stack exchange,提问作者Steven Matthews
相关产品推荐
相关产品推荐

