Redux开发中调用Selector获取状态时出现返回undefined的异常问题
报错直接定位
TypeError: Cannot read property 'myPost' of undefined 出现在选择器代码行,说明你在选择器里读取myPost的上一级对象本身就是undefined,还没走到读myPost的逻辑就触发了空引用。
核心原因
你给出的store配置里明确写了:combineReducers合并userReducer和postReducer时,是把postReducer挂载到全局store的team键下。
这意味着全局状态树的顶层只有两个键:
- 对应userReducer的
user - 对应postReducer的
team
根本不存在你之前写的posts、post这两个顶层键,所以reduxState.posts、reduxState.post自然都是undefined,报空引用是必然的。
另外注意:postReducer自己的状态对象(也就是包含myPost字段的那个对象),就是挂载在reduxState.team下面的。
修正后的选择器
export const selectPosts = reduxState => reduxState.team.myPost
排查技巧
后续如果拿不准状态路径,直接在选择器开头打印全局状态结构,不要靠猜键名:
export const selectPosts = reduxState => { // 控制台打印后就能看到完整的状态树层级,直接照着抄路径就行 console.log('全局状态:', reduxState) return reduxState.team.myPost }
容易踩的坑
- 动作类型的前缀(比如你用的
posts/add)和combineReducers的挂载键没有强制对应关系,不要看到动作前缀是posts就默认挂载键叫posts - 选择器的路径必须严格和combineReducers里定义的挂载键对齐,差一个字母都会读不到状态
内容的提问来源于stack exchange,提问作者misto_robotto
相关产品推荐
相关产品推荐

