Expo eject项目Redux配置报Maximum call stack exceeded如何解决
问题修复方案
- 移除重复导入
提供的配置代码中重复导入了AsyncStorage,删除其中一行重复的导入语句即可。 - 补全缺失的中间件导入
代码中使用了apiMiddleware但没有对应导入逻辑,确认需要使用就补全导入,不需要就从applyMiddleware的参数中删除该中间件。 - 生产环境禁用Redux开发者工具
当前配置在所有环境都加载了Redux DevTools,生产环境下该工具会产生大量额外的性能消耗,是低端设备触发栈溢出的核心原因之一,修改配置如下:
const middleware = applyMiddleware(ReduxThunk, apiMiddleware); // 仅开发环境加载devtools const enhancer = process.env.NODE_ENV === 'development' ? composeWithDevTools(middleware) : middleware; const store = createStore(pReducer, enhancer);
- 降级redux-persist到稳定版本
你使用的redux-persist@6.0.0是不稳定的预发布版本,和当前项目的redux、react-native版本存在兼容问题,会导致初始化阶段循环调用,执行以下命令降级到稳定版即可:npm install redux-persist@5.10.0 - 校验reducer规范
确认所有reducer符合纯函数要求:不要在reducer内部直接修改state、不要调用外部可变方法、不要触发dispatch操作,这些不符合规范的写法都会导致状态更新死循环。 - 验证redux-persist必要性
你当前的persistConfig中whitelist为空,说明不需要持久化任何reducer数据,可以直接移除所有redux-persist相关逻辑,避免不必要的初始化性能开销。
内容的提问来源于stack exchange,提问作者Zuka Gaprindashvili
相关产品推荐
相关产品推荐

