React Redux中useSelect获取reportDirReducer状态返回undefined问题
取值为undefined的核心原因
两处导入导出不匹配的问题直接导致了状态取值异常,具体说明如下:
1. 转导出链路断裂,reducer未被正确加载
- 在
reducer/directories/reportDir.js中,你是通过export default reportDirReducer的默认导出方式向外暴露reducer - 但
reducer/directories/index.js中写的export * from './reportDir'语法,只会透传源文件的命名导出,完全不会传递源文件的默认导出内容 - 顺着这个断裂的链路,你在根reducer文件中写的
import { reportDirReducer } from './directories'实际拿到的是undefined,根本不是编写好的reducer函数,自然没法生成对应的状态切片。
修正方案二选一即可:
- 改
reportDir.js的导出方式,把默认导出换成命名导出:// 替换原有的export default写法 export const reportDirReducer = (state = reportDir) => { return state } - 改
reducer/directories/index.js的转导出逻辑,显式把默认导出转为命名导出透传:// 替换原有的export *写法 export { default as reportDirReducer } from './reportDir'
2. 确认取值路径与合并reducer的key匹配
等reducer被正确挂载到combineReducers中后,组件里取数的路径要和合并配置里的key完全对应:
- 你在根reducer中配置的合并项是
combineReducers({ ..., reportDirReducer }),所以用useSelector取数时的路径要写为state => state.reportDirReducer,如果错写为其他路径比如state => state.reportDir,同样会拿到undefined。
注意:你提到的useSelect()是拼写疏漏,React-Redux提供的标准状态取值钩子是useSelector,如果导入时拼写错误也会触发取值异常。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

