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

将函数作为props传递给React子组件时无法正常执行的问题

React父组件传递函数props给子组件无法触发执行的解决方法

错误原因分析

你的代码存在两个关键问题导致函数无法触发:

  • props名称不匹配:父组件传递的props属性是onClick,但子组件里尝试调用的是props.Reset,两者名称不一致,导致子组件找不到对应的函数。
  • 函数未实际执行:不管是父组件里的() => Reset还是子组件里的() => props.Reset,都只是返回了函数的引用,没有调用函数,所以点击按钮时不会执行Reset里的逻辑。

修正后的代码

父组件(App.js)

import React from "react";
import Win from "./components/Win"

function App() {
  const [squares, setSquares] = React.useState(dices)
  const [allSame, setAllSame] = React.useState(false)

  function Reset() {
    console.log("yes")
  }

  // 修正:将props属性名改为Reset,直接传递函数引用
  return (
    <Win Reset={Reset} />
  )
}

export default App;

子组件(Win.js)

import React from "react"
import reset from "../images/reset.png"
import Confetti from "./Confetti"

export default function Win(props) {
    return (
        <div className="Win">
            {/* <Confetti /> */}
            <h1 style={{color:"white", fontSize:"4rem"}}>You Won</h1>
            {/* 修正:点击时执行props.Reset函数 */}
            <button onClick={props.Reset}>Press ME</button>
        </div>
    )
}

补充说明

  • 如果需要在传递函数时额外传递参数,可以用箭头函数包裹,比如父组件里写<Win Reset={() => Reset(参数)} />,子组件里对应写成<button onClick={props.Reset}>Press ME</button>。
  • 直接传递函数引用(Reset={Reset})比箭头函数包裹更高效,避免每次渲染都创建新的函数实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:38:27