React-Redux从5.x升级至7.x后connect函数提示找不到store问题排查
react-redux v5升级v7报store不存在问题解决方案
这个报错的核心原因是Provider和connect使用的react-redux上下文不匹配,并非你写的connect语法存在问题,react-redux v7对connect的基础用法完全兼容v5版本。
常见触发场景和解决方案
- 项目中存在多版本react-redux副本
执行npm ls react-redux(npm环境)或yarn list react-redux(yarn环境)检查依赖树,如果存在多个不同版本的react-redux,旧版本的connect会读取不到新版本Provider下发的store。
解决方法:在package.json中添加配置强制统一版本:- yarn环境添加resolutions字段:
"resolutions": { "react-redux": "^7.x" } - npm环境添加overrides字段:
"overrides": { "react-redux": "^7.x" }
- yarn环境添加resolutions字段:
- 导入路径不一致
检查所有用到Provider、connect的文件,确认都是从根依赖的react-redux包导入,没有从第三方组件内部、相对路径导入其他版本的react-redux导出的API。 - 自定义上下文不匹配
如果你的项目中自定义了react-redux的context参数,需要保证传递给Provider的context和传递给connect的context是同一个实例,v7使用的是React 16.6+的新Context API,和v5的legacy上下文不兼容。
快照差异说明
你观察到的快照外层Connect(XXX)节点消失是v7版本的正常优化,并非connect调用异常:v7重构了connect的内部实现,默认隐藏了外层的HOC包装节点,在devtools、快照中都会直接展示被包装的原组件,这个差异不需要额外处理。
内容的提问来源于stack exchange,提问作者OmegaNalphA
相关产品推荐
相关产品推荐

