react-redux两段connect写法差异:前者无法正确传递state相关props
两段代码的核心差异如下:
1. mapDispatchToProps的实现逻辑不同(这是第一段代码异常的核心原因)
- 第一段你手写的函数式
mapDispatchToProps里,所有封装的方法都没有透传调用时传入的参数:
比如changeInput、insert、toggle、remove这几个action creator本身都需要接收对应参数(输入框值、todo内容、todo id等)才能生成有效的action更新store,但你写的调用逻辑是dispatch(changeInput()),没有把调用方法时传入的参数传递给action creator,触发action后store不会产生有效更新,你误以为是state对应的props没传递,本质是state根本没被正确修改,拿到的永远是初始值。 - 第二段用的是react-redux内置支持的对象简写形式
mapDispatchToProps,框架会自动完成两个逻辑:① 给每个传入的action creator自动包裹一层dispatch调用 ② 调用方法时自动透传所有参数给对应的action creator,所以能正常更新store,props也会同步变化。
2. 写法简洁度差异
两段代码的mapStateToProps逻辑完全等价,只是第二段用了解构语法直接提取state中的todos字段,写法更简洁,不存在逻辑差异。
如果要让第一段代码正常工作,只需修改mapDispatchToProps的逻辑,透传所有参数即可:
const mapDispatchToProps = dispatch => ({ changeInput: (value) => { dispatch(changeInput(value)); }, insert: (todoText) => { dispatch(insert(todoText)); }, toggle: (todoId) => { dispatch(toggle(todoId)); }, remove: (todoId) => { dispatch(remove(todoId)); } });
修改后第一段和第二段的运行效果完全一致。
内容的提问来源于stack exchange,提问作者minsang
相关产品推荐
相关产品推荐

