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

React函数式组件中如何获取另一组件内被点击的Card卡片的id

React点击卡片获取对应ID实现方案

问题原因

你的代码存在3处核心问题:

  • React hooks(useState)不能写在组件作用域外部,会直接触发语法报错
  • 父组件没有把点击回调函数作为props传递给子Card组件,父子组件没有通信通道
  • 子Card组件没有接收回调props,也没有在点击按钮时传入当前卡片的id触发回调

修复后代码

1. card.js

import React from "react";

// 组件接收父组件传入的onBtnClick回调参数
const Card = ({ title, id, onBtnClick }) => {
    return (
        <div className="card">
            <div className="description">
                <h1>{title}</h1>
                {/* 点击按钮时触发回调,传入当前卡片id */}
                <button onClick={() => onBtnClick(id)}>Know more</button>
            </div>
        </div>
    );
};

export default Card;

2. app.js

import React, { useState } from "react";
import Card from "./card";

const Cards = () => {
    // 把useState移到组件内部
    const [cards, setCards] = useState([]);
    // 点击回调也定义在组件内部
    const onBtnClick = (id) => {
        console.log(id); // 此处即可拿到被点击卡片的唯一id
    };

    return (
        <div>
            {cards.length > 0 && cards.map((card) => (
                {/* 渲染时将onBtnClick作为props传给子组件 */}
                <Card key={card.id} {...card} onBtnClick={onBtnClick} />
            ))}
        </div>
    );
};

export default Cards;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:36:03