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

React中如何在同一个组件内选中多个带有指定类名的HTML元素

React 中获取数量不定的指定类名元素的方案

方案1:使用 ref 回调动态收集所有目标元素

该方案不需要预先知道元素数量,会自动收集所有绑定了对应回调的元素:

import { useRef, useEffect } from 'react';

const MyComponent = () => {
    // 存储所有.sum元素的容器
    const sumRefs = useRef([]);

    useEffect(() => {
        // 组件挂载完成后即可拿到全部.sum元素
        sumRefs.current.forEach(el => {
            // 此处编写对DOM元素的操作逻辑,比如读取尺寸、修改样式等
            console.log(el.offsetHeight);
        });
    }, []);

    // 每次渲染前清空ref容器,避免更新时出现无效/重复的DOM引用
    sumRefs.current = [];

    return (
        <div className="container">
            <div></div>
            <div className="sum" ref={el => el && sumRefs.current.push(el)}></div>
            <div></div>
            <div></div>
            {/* 所有.sum元素都添加相同的ref回调即可 */}
            <div className="sum" ref={el => el && sumRefs.current.push(el)}></div>
            <div className="sum" ref={el => el && sumRefs.current.push(el)}></div>
        </div>
    );
};

方案2:父容器范围查询(更简洁)

该方案不需要给每个目标元素加ref,仅通过父容器的ref做范围查询,不会选中组件外的同类型元素,符合React使用规范:

import { useRef, useEffect } from 'react';

const MyComponent = () => {
    const containerRef = useRef(null);

    useEffect(() => {
        // 仅在当前组件的container范围内查询.sum元素,不会污染全局
        const sumElements = containerRef.current.querySelectorAll('.sum');
        console.log(sumElements);
        // 后续批量操作逻辑
    }, []);

    return (
        <div className="container" ref={containerRef}>
            <div></div>
            <div className="sum"></div>
            <div></div>
            <div></div>
            <div className="sum"></div>
            <div className="sum"></div>
        </div>
    );
};

选型建议

  • 若需要单独绑定每个目标元素的引用、或元素会频繁增删需要精准对应,选择方案1
  • 若仅需要批量操作全部目标元素,方案2代码更简洁,侵入性更低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:27:02