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

如何将App组件内关联状态的未导出函数传递给子组件

问题原因及修复方案

核心错误点

  • 错误1:不应该直接导入App组件内部的myFunction。组件内部定义的函数绑定了当前组件的state、props上下文,脱离App组件实例单独导入使用时,无法访问到App内部的data、setItemColor等状态和方法,必然报错。
  • 错误2:传递函数时加了括号执行click={myFunction()},这种写法会在组件渲染阶段直接执行函数,而不是把函数作为回调传给子组件触发时调用。
  • 错误3:Item组件中错误将函数类型的props.click拼接为类名字符串,会导致类名异常,同时也不符合逻辑。

具体修复步骤

1. 调整App.tsx,将函数通过props传递给Child组件

在App组件渲染Child的位置,把myFunction作为props传入:

// App.tsx 中渲染Child组件的位置
<Child myFunction={myFunction} />

2. 调整Child.tsx,接收props并透传给Item

删除错误的import语句,从当前组件的props中拿到传递的函数,透传给Item时不要加执行括号:

// Child.tsx
// 删掉 import myFunction from '../App' 这行错误代码
function Child(props) {
  // 原有其他逻辑
  return <Item click={props.myFunction}></Item>
}

3. 修正Item组件的逻辑

移除类名中错误拼接的props.click,正确绑定点击事件即可:

function Item(props) {
    // 类名不要拼接函数类型的props.click,按需调整你的类名逻辑即可
    let colorHeaderClassName = `selected`; 

    return (
        <>
            <Button
                onClick={props.click}
                className={colorHeaderClassName}
            />
        </>
    );
}

可选:Typescript类型优化

可以给组件加上props类型定义,避免类型报错:

// Item组件props类型示例
type ItemProps = {
  click: (e: React.FormEvent) => void
}
function Item(props: ItemProps) {
  // 组件原有逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:57:00