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

使用React Hooks实现父函数向子函数传递Props

问题分析与解决方案

你的代码里有几个核心问题导致变量无法识别,逐个修正如下:

1. 混淆自定义Hook与React组件

useSquare 返回JSX元素,这不符合React Hook的规则(Hook用于提取复用状态逻辑,不能直接返回UI),它应该是一个React组件,命名改成Square(组件首字母大写是React的强制规范)。

2. onClick事件绑定错误

你把函数调用写成了组件标签形式,这是完全错误的。onClick需要接收一个函数,而非JSX元素,同时要处理player的传递与点击逻辑。

3. 未定义setGetplayer

代码里的setGetplayer没有对应的useState定义,需要在父组件中补充。


修正后的完整代码

import { useState } from 'react';

// 修正为React组件,首字母大写
const Square = ({ squareState, setSquareState, player, setGetPlayer }) => {
  // 组件内部定义点击处理函数,直接使用传入的props
  const handleSquareClick = () => {
    setSquareState(player);
    setGetPlayer(true);
  };

  return (
    <button className="square" onClick={handleSquareClick}>
      {squareState}
    </button>
  );
};

const Board = ({ player }) => {
  const status = `Next Player : ${player}`;
  const [square1State, setSquare1State] = useState(1);
  // 补充缺失的setGetPlayer对应的state
  const [getPlayer, setGetPlayer] = useState(false);

  return (
    <div>
      <div className="status">{status}</div>
      <div className="board-row">
        <Square
          squareState={square1State}
          setSquareState={setSquare1State}
          player={player}
          setGetPlayer={setGetPlayer}
        />
      </div>
    </div>
  );
};

关键修正点说明

  • 组件命名:Square首字母大写,符合React组件命名规范,避免被误判为普通函数或Hook。
  • 事件绑定:onClick={handleSquareClick}直接传递函数引用,替代错误的JSX写法。
  • Props传递:将player和setGetPlayer作为Props传给子组件,确保函数能访问所需变量。
  • 状态定义:在Board组件中补充getPlayer的状态定义,修复setGetplayer未定义的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:01:11