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

React Native使用react-redux的connect传入mapDispatchToProps报类型错误如何解决

问题原因与解决方案

1. 核心错误:connect调用语法不符合规范

react-redux提供的connect高阶函数的传参规则为:

connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])

函数执行后返回的高阶组件仅接受「要连接的组件」作为唯一入参,你使用的链式调用写法是错误的:

// 错误写法
export default connect(mapStateToProps)(mapDispatchToProps)(MyApp);

你把mapDispatchToProps错当成了第一阶的入参传入,此时返回的不是可执行的高阶组件,而是错误的对象实例,因此触发你看到的TypeError。

修正方法:把mapStateToProps和mapDispatchToProps都作为connect的参数传入第一对括号,第二对括号只传入你的业务组件:

export default connect(mapStateToProps, mapDispatchToProps)(MyApp);

2. 补充修正:action调用逻辑错误

就算修正了connect语法,你当前的action调用代码也无法正常触发状态更新:你直接调用了导入的addQuote原始action creator,没有绑定dispatch,不会通知store处理动作。
经过connect连接后,你定义的addQuote方法已经被注入到组件的props中,直接从props取值调用即可:

// 函数组件示例:从props解构出绑定好的addQuote
const MyApp = ({ addQuote }) => {
  // ...其他业务逻辑
  const handleSubmitButton = (val) => addQuote(val);
  
  // 原有视图代码无需修改
  return (
    <TouchableOpacity
      style={styles.submitButton}
      onPress={ () => handleSubmitButton(quoteForm) }
    >
      <Text style={{ color: '#fff' }}>
        SOUMETTRE
      </Text>
    </TouchableOpacity>
  )
}

如果是类组件,调用方式改为this.props.addQuote(val)即可。

可选优化

mapDispatchToProps支持更简洁的对象写法,不需要手动包裹dispatch:

// 和你原有写法效果完全一致,更简洁不易出错
const mapDispatchToProps = { addQuote }

内容的提问来源于stack exchange,提问作者user14623448

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:48:04