React使用redux connect时报props.numberArray.map is not a function错误如何解决
错误根因
你的mapStateToProps和mapDispatchToProps定义了同名key numberArray,react-redux的connect方法合并两类props时,mapDispatchToProps返回的字段优先级更高,会覆盖mapStateToProps的同名字段,所以最终组件拿到的props.numberArray是用于触发更新的函数,不是数组,调用map方法自然会抛出类型错误。
使用useSelector获取数据时,只会直接从redux store读取状态,不会和dispatch方法合并,因此不会出现覆盖问题,运行正常。
修复步骤
- 修改
mapDispatchToProps中的方法名,避免和state中的数组字段重名,同时纠正原变量名笔误(原代码写为mapStateToDispatch,标准命名为mapDispatchToProps):
const mapDispatchToProps = (dispatch) => { return{ updateName:() =>dispatch(updateName('orange')), // 此处方法名修改为和state字段不冲突的名称 updateNumberArray:() =>dispatch(updateNumberArray(15)), } }
- 组件中如果要触发数组更新,调用
props.updateNumberArray即可,props.numberArray会正常返回store中的数组,可以调用map方法遍历。
补充说明:你贴出的reducer代码中createSlice方法缺少闭合的}),补全即可正常运行,该问题不影响本次报错。
内容的提问来源于stack exchange,提问作者asif kaif
相关产品推荐
相关产品推荐

