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

React函数组件传递带参函数Props给子组件时参数失效问题

问题分析与修复方案

核心问题

你的代码存在两处关键错误,导致点击OK按钮时console.log输出事件对象而非预期的输入值:

1. 子组件Button的onClick绑定错误

子组件中这段代码:

<Button onClick={props.submitHandler(formInput)}>OK</Button>

这里直接执行了props.submitHandler(formInput),属于组件渲染阶段就触发函数,而非点击按钮时才触发。当点击事件真正发生时,React会默认把事件对象作为参数注入回调,最终覆盖了你传入的formInput,导致addNewActivity接收到的是事件对象。

2. 父组件传递submitHandler的写法错误

父组件中这段代码:

submitHandler={() => addNewActivity}

这个箭头函数仅返回addNewActivity函数本身,既没有接收参数,也没有调用它。即便子组件正确传递了formInput,这个箭头函数也无法把参数传递给addNewActivity。


修复步骤

第一步:修正子组件的onClick绑定

用箭头函数包裹,确保点击按钮时才调用submitHandler并传入formInput:

<Button onClick={() => props.submitHandler(formInput)}>OK</Button>

第二步:修正父组件的submitHandler传递

有两种简洁的写法可选:

  • 写法一(推荐):直接传递addNewActivity函数本身
<FormModal
  buttonText="+ Add"
  modalTitle="Enter activity here"
  modalText=""
  placeholder="Activity Name"
  submitHandler={addNewActivity}
/>
  • 写法二(适合需要额外逻辑处理的场景):用箭头函数显式接收参数并调用
<FormModal
  buttonText="+ Add"
  modalTitle="Enter activity here"
  modalText=""
  placeholder="Activity Name"
  submitHandler={(activity) => addNewActivity(activity)}
/>

修复后效果

点击OK按钮时,子组件会通过箭头函数把输入框的状态值formInput传给父组件的addNewActivity,此时console.log(newActivity)就能输出预期的输入内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:55:23