You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:24:01