当前位置:首页 > React

react如何获取真实dom

2026-03-10 22:49:07React

获取真实 DOM 的方法

在 React 中,通常推荐使用虚拟 DOM 进行渲染优化,但某些场景(如集成第三方库、测量元素尺寸等)需要直接访问真实 DOM。以下是几种常用方法:

使用 ref 属性

通过 createRefuseRef 创建引用,绑定到目标元素上,通过 current 属性访问真实 DOM。

类组件示例:

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }

  componentDidMount() {
    console.log(this.myRef.current); // 输出真实 DOM 节点
  }

  render() {
    return <div ref={this.myRef}>目标元素</div>;
  }
}

函数组件示例:

function MyComponent() {
  const myRef = React.useRef(null);

  React.useEffect(() => {
    console.log(myRef.current); // 输出真实 DOM 节点
  }, []);

  return <div ref={myRef}>目标元素</div>;
}

回调形式的 ref

通过传递函数给 ref 属性,在回调中获取 DOM 节点。

function MyComponent() {
  const handleRef = (node) => {
    if (node) {
      console.log(node); // 输出真实 DOM 节点
    }
  };

  return <div ref={handleRef}>目标元素</div>;
}

通过 findDOMNode(不推荐)

React 提供了 ReactDOM.findDOMNode,但官方不推荐使用,因其可能破坏组件封装性。

import ReactDOM from 'react-dom';

class MyComponent extends React.Component {
  componentDidMount() {
    const node = ReactDOM.findDOMNode(this);
    console.log(node); // 输出组件根 DOM 节点
  }

  render() {
    return <div>目标元素</div>;
  }
}

动态多元素绑定

通过 ref 列表或 Map 结构管理多个 DOM 节点。

react如何获取真实dom

function MyList() {
  const items = ['A', 'B', 'C'];
  const refs = React.useRef(new Map());

  React.useEffect(() => {
    refs.current.forEach((node, key) => {
      console.log(key, node); // 输出每个节点的键和 DOM 对象
    });
  }, []);

  return (
    <ul>
      {items.map((item) => (
        <li
          key={item}
          ref={(node) => {
            if (node) refs.current.set(item, node);
            else refs.current.delete(item);
          }}
        >
          {item}
        </li>
      ))}
    </ul>
  );
}

注意事项

  • 避免在渲染阶段访问 ref.current,此时 DOM 可能未更新。
  • 函数组件中,useRef 的初始化值仅在首次渲染时生效。
  • 动态生成的 ref 需注意内存泄漏问题,及时清理无用引用。

标签: 真实react
分享给朋友:

相关文章

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指阻止组件在特定条件下进行不必要的渲染。可以通过以下几种方式实现: 条件渲染 使用条件语句(如if或三元运算符)直接返回null,避免渲染组件内容。例如:…

react 如何引入css

react 如何引入css

在 React 中引入 CSS 的方法 React 提供了多种引入 CSS 的方式,可以根据项目需求选择合适的方法。以下是常见的几种方式: 内联样式 内联样式直接在组件中通过 style 属性定义,…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…

如何下载react

如何下载react

下载 React 的方法 通过 npm 或 yarn 安装 React 可以通过包管理器 npm 或 yarn 安装。确保已安装 Node.js(包含 npm),然后在项目目录中运行以下命令:…

react如何encode

react如何encode

React 中编码的实现方式 在 React 中,编码通常涉及对 URL、HTML 实体或特殊字符的处理。以下是几种常见的编码方法: 使用 encodeURIComponent 进行 URL 编码…

react如何debugger

react如何debugger

调试 React 应用的方法 使用浏览器开发者工具进行调试 React 开发者工具(React DevTools)是调试 React 应用的必备工具。安装 Chrome 或 Firefox 扩展后,可…