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

React中点击卡片按钮如何获取父div的id并赋值给变量a

React点击按钮获取父卡片ID并赋值给变量的实现方法

这里提供几种实用的实现方式,根据你的场景选择:

方法1:直接传递ID(最直观)

如果渲染卡片时已经知道ID值,直接把ID作为参数传给点击事件处理函数即可,无需操作DOM:

import { useState } from 'react';

function CardList() {
  // 推荐用React状态管理变量,而非全局/局部let(符合组件状态管理范式)
  const [a, setA] = useState('');

  const handleCardClick = (cardId) => {
    // 如果一定要用let a,替换成 a = cardId; 即可
    setA(cardId);
    console.log('当前选中卡片ID:', cardId);
  };

  return (
    <>
      <div id='1' className='card'>
        <button onClick={() => handleCardClick('1')}>Click</button>
        <div className='card-body'></div>
      </div>
      <div id='2' className='card'>
        <button onClick={() => handleCardClick('2')}>Click</button>
        <div className='card-body'></div>
      </div>
      {/* 批量渲染场景示例 */}
      {[3,4,5].map(id => (
        <div key={id} id={id} className='card'>
          <button onClick={() => handleCardClick(id.toString())}>Click</button>
          <div className='card-body'></div>
        </div>
      ))}
    </>
  );
}

优点:无需依赖DOM结构,代码清晰,性能更好,适合批量渲染卡片的场景。

方法2:通过事件对象获取父元素ID

如果无法提前获取ID,可利用事件对象找到卡片容器的ID:

function CardList() {
  let a = '';

  const handleCardClick = (e) => {
    // 找到最近的.card容器(避免DOM结构变化导致的错误)
    const cardElement = e.currentTarget.closest('.card');
    if (cardElement) {
      a = cardElement.id;
      console.log('当前选中卡片ID:', a);
    }
  };

  return (
    <>
      <div id='1' className='card'>
        <button onClick={handleCardClick}>Click</button>
        <div className='card-body'></div>
      </div>
      <div id='2' className='card'>
        <button onClick={handleCardClick}>Click</button>
        <div className='card-body'></div>
      </div>
    </>
  );
}

注意:如果卡片DOM结构调整(比如按钮外面多了一层容器),closest('.card')能确保正确找到目标元素,比直接用parentElement更鲁棒。

方法3:使用React ref(不推荐,仅特殊场景)

如果需要直接操作DOM元素,可给卡片添加ref,但这种方式不符合React的声明式编程理念,除非必要不建议使用:

import { useRef } from 'react';

function CardList() {
  let a = '';
  const cardRefs = useRef({});

  const handleCardClick = (cardId) => {
    a = cardRefs.current[cardId].id;
    console.log('当前选中卡片ID:', a);
  };

  return (
    <>
      <div ref={el => cardRefs.current['1'] = el} id='1' className='card'>
        <button onClick={() => handleCardClick('1')}>Click</button>
        <div className='card-body'></div>
      </div>
      <div ref={el => cardRefs.current['2'] = el} id='2' className='card'>
        <button onClick={() => handleCardClick('2')}>Click</button>
        <div className='card-body'></div>
      </div>
    </>
  );
}

内容的提问来源于stack exchange,提问作者Said Al-Ghiyats

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:50:29