React获取DOM节点


在React中,通常不推荐直接操作DOM节点,因为React通过其虚拟DOM(Virtual DOM)来管理DOM的更新,以确保性能优化和一致性。
然而,在某些情况下,你可能需要直接访问DOM节点。React提供了几种方法来实现这:

使用 useRef

const myRef = useRef(null);

在函数式组件中:

import React, { useRef, useEffect } from 'react';  
  
function MyComponent() {  
  const myRef = useRef(null);  
  
  useEffect(() => {  
    if (myRef.current) {  
      // 在这里,myRef.current 是DOM节点  
      console.log(myRef.current);  
    }  
  }, []);  
  
  return <div ref={myRef}>Hello, World!</div>;  
}

使用 useRef 来创建一个 ref ,并将其附加到一个 <div> 元素上,这样可以访问 myRef.current 来获取该 <div> 的DOM节点。


使用 createRef

myRef = React.createRef();

在类组件中:

import React from 'react';  
  
class MyComponent extends React.Component {  
  myRef = React.createRef();  
  
  componentDidMount() {  
    // 在这里,this.myRef.current 是DOM节点  
    console.log(this.myRef.current);  
  }  
  
  render() {  
    return <div ref={this.myRef}>Hello, World!</div>;  
  }  
}

注意:createRef 已被列为过时的 API,不再推荐在最新代码中使用


使用回调函数形式

ref={c => this.myRef = c}

在类组件中:

import React from 'react';  
  
class MyComponent extends React.Component {  
  myRef = null; // 在类组件中定义一个实例属性来保存DOM节点  
  
  // 组件挂载或更新后,可以访问this.myRef来获取DOM节点  
  componentDidMount() {  
    console.log(this.myRef); // 访问DOM节点  
    console.log(this.myRef.value); // 获取input值
  }  
  
  render() {  
    return (  
      <div>  
        <input ref={c => this.myRef = c} type="text" />  
        {/* 当input被挂载或更新时,this.myRef会被设置为对应的DOM节点 */}  
      </div>  
    );  
  }  
}  
  
export default MyComponent;

官方更建议使用函数组件的 useRef

相关推荐

  1. React获取DOM节点

    2024-06-19 01:30:03       28 阅读
  2. React-2-useState-获取DOM-组件通信

    2024-06-19 01:30:03       34 阅读
  3. React Router DOM BrowserRouter

    2024-06-19 01:30:03       36 阅读
  4. quickapp_快应用_DOM节点

    2024-06-19 01:30:03       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-19 01:30:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-19 01:30:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-19 01:30:03       82 阅读
  4. Python语言-面向对象

    2024-06-19 01:30:03       91 阅读

热门阅读

  1. 科大讯飞面经详解!

    2024-06-19 01:30:03       29 阅读
  2. IPython的进阶使用有哪些?

    2024-06-19 01:30:03       34 阅读
  3. Vue form表单验证

    2024-06-19 01:30:03       32 阅读
  4. 分数限制下,选好专业还是选好学校?

    2024-06-19 01:30:03       29 阅读
  5. linux git凭证管理

    2024-06-19 01:30:03       31 阅读
  6. 【MongoDB】如何在Debian 10 Linux上安装MongoDB

    2024-06-19 01:30:03       27 阅读
  7. 二分查找.

    2024-06-19 01:30:03       28 阅读
  8. oracle将字符串中的字符和数字拆分开等功能

    2024-06-19 01:30:03       31 阅读