当前位置: 首页 > news >正文

React获取DOM节点

文章目录

  • 使用 useRef
  • 使用 createRef
  • 使用回调函数形式

在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

相关文章:

  • 【Android】基于webView打造富文本编辑器(H5)
  • 网络故障排查-TCP标志位
  • VB.net调用VC DLL(二)
  • AD域离线破解新思路:Trustroasting和TimeRoasting
  • HTML(13)——显示模式
  • 渗透测试基础(四) MS08-067 漏洞攻击
  • InPixio Photo Cutter v10 解锁版安装教程 (懒人抠图工具)
  • KEYSIGHT是德E5063A网络分析仪
  • 网络编程面试题
  • 企业PC端官网在线客服源码系统 完全开源可二开 附带源代码包+搭建部署教程
  • ABB机器人SMB板卡的安装及更换方法
  • AI视频智能监管赋能城市管理:打造安全有序的城市环境
  • 关于BERT和embedding
  • MacBook Air M3的电脑怎么样 新买MacBook Air提示内存不足 苹果电脑内存不够用怎么办
  • Nginx 部署 Vue 打包项目,将dist目录上传至ngnix中的目录中,遇到的问题
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • JS笔记四:作用域、变量(函数)提升
  • leetcode98. Validate Binary Search Tree
  • Linux各目录及每个目录的详细介绍
  • mysql外键的使用
  • Puppeteer:浏览器控制器
  • React+TypeScript入门
  • vue-router 实现分析
  • 初识 webpack
  • 仿天猫超市收藏抛物线动画工具库
  • - 概述 - 《设计模式(极简c++版)》
  • 解析带emoji和链接的聊天系统消息
  • 理解在java “”i=i++;”所发生的事情
  • 前端设计模式
  • 手机端车牌号码键盘的vue组件
  • #include
  • #每天一道面试题# 什么是MySQL的回表查询
  • (02)Unity使用在线AI大模型(调用Python)
  • (2)空速传感器
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C#)一个最简单的链表类
  • (k8s中)docker netty OOM问题记录
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (函数)颠倒字符串顺序(C语言)
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (十三)Flink SQL
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (原創) 物件導向與老子思想 (OO)
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • ***监测系统的构建(chkrootkit )
  • .NET : 在VS2008中计算代码度量值
  • .NET 8.0 中有哪些新的变化?
  • .NET Core中如何集成RabbitMQ
  • .NET 中的轻量级线程安全
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项