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

React/TypeScript中点击父div时如何获取嵌套DOM元素的文本值

React点击父容器获取嵌套文本的最优实现方案

方案优先级说明

优先按照「状态驱动 > 事件DOM查询 > Ref绑定」的顺序选择方案,越靠前越符合React的设计理念。


方案1:状态驱动(最优推荐)

React是数据驱动框架,文本内容本身应该保存在组件状态中,完全不需要操作DOM即可获取值:

import { useState } from 'react';

function DemoComponent() {
  // 直接将需要获取的文本存在状态中
  const [valueText, setValueText] = useState('Text Value');

  const handleOuterClick = () => {
    // 直接读取状态值即可,无任何DOM操作
    console.log(valueText);
  }

  return (
    <div className='Outer' onClick={handleOuterClick}>
      <div className='Inner'>
        <p className='value'>{valueText}</p>
      </div>
    </div>
  )
}

优势:性能最优、逻辑可预测、完全符合React单向数据流规范,是首选实现。


方案2:事件对象DOM查询(适合文本不受当前组件控制的场景)

如果目标文本是第三方组件渲染、无法拿到对应状态,可以用你之前的事件方案补充子节点查询逻辑:

const handleProps = (e: React.MouseEvent<HTMLElement>) => {
  e.preventDefault();
  // 从当前触发事件的父容器出发,查询目标子节点
  const valueNode = e.currentTarget.querySelector('.value') as HTMLElement;
  const targetText = valueNode?.innerText || '';
  console.log(targetText);
}

适用场景:DOM结构不受当前组件控制,无需额外声明变量,代码量最少。注意加可选链判断避免节点不存在时报错。


方案3:Ref绑定(适合频繁读取文本的场景)

你对Ref的理解有误:Ref不仅适用于输入框,可绑定任意DOM元素。如果需要频繁读取该文本值,用Ref比每次点击都查询DOM性能更高:

import { useRef } from 'react';

function DemoComponent() {
  // 给目标p标签绑定Ref
  const valueRef = useRef<HTMLParagraphElement>(null);

  const handleOuterClick = () => {
    const targetText = valueRef.current?.innerText || '';
    console.log(targetText);
  }

  return (
    <div className='Outer' onClick={handleOuterClick}>
      <div className='Inner'>
        <p className='value' ref={valueRef}>Text Value</p>
      </div>
    </div>
  )
}

适用场景:需要频繁操作/读取该节点的场景,单次点击读取不需要用这个方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:27:03