位置: IT常识 - 正文

React获取DOM和获取组件实例的方式(react useref获取dom元素)

编辑:rootadmin
React获取DOM和获取组件实例的方式 文章目录React获取DOM的方式ref获取DOM元素ref获取组件实例React获取DOM的方式ref获取DOM元素

推荐整理分享React获取DOM和获取组件实例的方式(react useref获取dom元素),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react获取元素,react获取ref,react useref获取dom元素,react 获取dom,react useref获取dom元素,react获取ref,react获取数据,react 获取dom,内容如对您有帮助,希望把文章链接给更多的朋友!

在React的开发模式中,通常情况下不需要、也不建议直接操作DOM原生,但是某些特殊的情况,确实需要获取到DOM进行某些操作:

管理焦点,文本选择或媒体播放;

触发强制动画;

集成第三方 DOM 库;

我们可以通过refs获取DOM;

如何创建refs来获取对应的DOM呢?目前有三种方式:

方式一:传入字符串(这种做法已经不推荐)

在React元素上绑定一个ref字符串, 使用时通过 this.refs.传入的字符串格式获取对应的元素;

import React, { PureComponent } from 'react'export class App extends PureComponent { getDom() { // 方式一 console.log(this.refs.hello) // <h2>Hello World</h2> } render() { return ( <div> <h2 ref="hello">Hello World</h2> <button onClick={() => this.getDom()}>获取DOM</button> </div> ) }}export default App

方式二:传入一个对象(常用的方式, 推荐)

React获取DOM和获取组件实例的方式(react useref获取dom元素)

在react中导入createRef, 通过createRef() 方式提前创建出来一个对象, 将创建出来的对象绑定到要获取的元素上;

使用时获取到创建的对象其中有一个current属性就是对应的元素;

import React, { PureComponent, createRef } from 'react'export class App extends PureComponent { constructor() { super() // 提前创建一个ref对象 this.titleRef = createRef() } getDom() { // 方式二 console.log(this.titleRef.current) // <h2>Hello World</h2> } render() { return ( <div> <h2 ref={this.titleRef}>Hello World</h2> <button onClick={() => this.getDom()}>获取DOM</button> </div> ) }}export default App

方式三:传入一个函数(了解)

该函数会在DOM被挂载时进行回调,这个函数回调时会传入一个元素对象,我们可以自己保存;

使用时,直接拿到之前保存的元素对象即可;

import React, { PureComponent, createRef } from 'react'export class App extends PureComponent { getDom() { } render() { return ( <div> <h2 ref="hello">Hello World</h2> <h2 ref={this.titleRef}>Hello World</h2> {/* 方式三, 回调函数会返回el, el就是我们要获取的DOM了 */} <h2 ref={el => console.log(el)}>Hello World</h2> <button onClick={() => this.getDom()}>获取DOM</button> </div> ) }}ref获取组件实例

ref 的值根据节点的类型而有所不同:

当 ref 属性用于 HTML 元素时,构造函数中使用 React.createRef() 创建的 ref 接收底层 DOM 元素作为其 current 属性;

当 ref 属性用于自定义 class 组件时,ref 对象接收组件的挂载实例作为其 current 属性;

你不能在函数组件上使用 ref 属性,因为他们没有实例;

这里我们演示一下ref获取一个class组件对象的实例:

import React, { PureComponent, createRef } from 'react'// 创建一个类组件, 作为子组件测试class Test extends PureComponent { test() { console.log("Test"); } render() { return <h2>Test</h2> }}export class App extends PureComponent { constructor() { super() this.tsetRef = createRef() } getDom() { // 获取组件实例 console.log(this.tsetRef.current) // 可以调用组件的实例方法 this.tsetRef.current.test() } render() { return ( <div> <Test ref={this.tsetRef}/> </div> ) }}export default App

函数式组件是没有实例的,所以无法通过ref获取他们的实例:

但是某些时候,我们可能想要获取函数式组件中的某个DOM元素;

这个时候我们可以通过 React.forwardRef 来绑定函数组件中的某个元素, forwardRef中接收两个参数, 参数一: props, 参数二: ref,后面我们也会学习 hooks 中如何使用ref;

import { render } from '@testing-library/react';import React, { PureComponent, createRef, forwardRef } from 'react'}// 创建一个函数组件, 作为子组件测试// 使用forwardRef将函数包裹起来const Foo = forwardRef(function(props, ref) { return ( <h2 ref={ref}>Foo</h2> )})export class App extends PureComponent { constructor() { super() // 提前创建一个ref对象 this.fooRef = createRef() } getDom() { // 获取函数组件中元素的DOM console.log(this.fooRef.current) } render() { return ( <div> <Foo ref={this.fooRef}/> </div> ) }}export default App
本文链接地址:https://www.jiuchutong.com/zhishi/299760.html 转载请保留说明!

上一篇:HTML小游戏12 —— 汽车赛道飙车游戏(附完整源码)(html5简单小游戏代码)

下一篇:实现扩展 external 能力的 Vite 插件(实现扩展功能的快捷键)

  • 小米wifi忘记密码了怎么改(小米wifi忘记密码如何重置)

    小米wifi忘记密码了怎么改(小米wifi忘记密码如何重置)

  • win10实时保护怎么永久关闭(win10实时保护怎么关闭需要管理员)

    win10实时保护怎么永久关闭(win10实时保护怎么关闭需要管理员)

  • win10图标大小怎么调节(win10图标大小怎么设置注册表)

    win10图标大小怎么调节(win10图标大小怎么设置注册表)

  • Word文档目录怎么设置(word文档目录怎么做)

    Word文档目录怎么设置(word文档目录怎么做)

  • 快手多少粉丝可以开店(快手多少粉丝可以挂小铃铛)

    快手多少粉丝可以开店(快手多少粉丝可以挂小铃铛)

  • 相机专业模式的英文都是什么意思(相机专业模式的s)

    相机专业模式的英文都是什么意思(相机专业模式的s)

  • 三星手机安全模式怎么解除(三星手机安全模式怎么切换到正常模式)

    三星手机安全模式怎么解除(三星手机安全模式怎么切换到正常模式)

  • 带着耳机打电话对方能听到耳机外面的声音吗(带着耳机打电话对方听不到声音)

    带着耳机打电话对方能听到耳机外面的声音吗(带着耳机打电话对方听不到声音)

  • 手机开热点对手机有影响吗(手机开热点对手机的危害)

    手机开热点对手机有影响吗(手机开热点对手机的危害)

  • 手机卡服务密码是什么(手机卡服务密码初始密码是多少)

    手机卡服务密码是什么(手机卡服务密码初始密码是多少)

  • 微信登录环境异常(微信登录环境异常怎么解封)

    微信登录环境异常(微信登录环境异常怎么解封)

  • 抖音名字可以改吗(抖音名字可以改颜色嘛)

    抖音名字可以改吗(抖音名字可以改颜色嘛)

  • 区域中找不到无线网络(区域中找不到无线网络的解决办法)

    区域中找不到无线网络(区域中找不到无线网络的解决办法)

  • 微信取消小米自动续费(小米手机怎么关闭微信自动续费)

    微信取消小米自动续费(小米手机怎么关闭微信自动续费)

  • iphone5s怎么没4g(iphone5s为啥没4g)

    iphone5s怎么没4g(iphone5s为啥没4g)

  • 微信传图识字是免费的吗(微信 传图识字)

    微信传图识字是免费的吗(微信 传图识字)

  • oppo怎么设置九宫格(oppo手机如何设置九宫)

    oppo怎么设置九宫格(oppo手机如何设置九宫)

  • 天猫精灵不联网闹钟会不会响(天猫精灵不联网闹钟会响吗)

    天猫精灵不联网闹钟会不会响(天猫精灵不联网闹钟会响吗)

  • 手机卡可以办副卡吗(手机卡可以办副卡有什么条件)

    手机卡可以办副卡吗(手机卡可以办副卡有什么条件)

  • 天猫u先在哪进入(天猫u先在哪里)

    天猫u先在哪进入(天猫u先在哪里)

  • 腾讯vip微信登录怎么分享(腾讯vip微信登录的二维码在哪里)

    腾讯vip微信登录怎么分享(腾讯vip微信登录的二维码在哪里)

  • 苹果手机不能下载探探吗(苹果手机不能下载软件怎么设置)

    苹果手机不能下载探探吗(苹果手机不能下载软件怎么设置)

  • 苹果手机怎样取消软件的消息推送(苹果手机怎样取消自动续费的功能)

    苹果手机怎样取消软件的消息推送(苹果手机怎样取消自动续费的功能)

  • 怎么清除微信里图片(怎么清除微信里面的僵尸朋友)

    怎么清除微信里图片(怎么清除微信里面的僵尸朋友)

  • 如何隐藏手机号码打电话(打举报电话如何隐藏手机号)

    如何隐藏手机号码打电话(打举报电话如何隐藏手机号)

  • 动态磁贴/ IE 浏览器没了,微软 Win11 功能特定要求、弃用移除功能列表公布(怎么添加动态磁贴)

    动态磁贴/ IE 浏览器没了,微软 Win11 功能特定要求、弃用移除功能列表公布(怎么添加动态磁贴)

  • win10重装系统后无法进入系统解决方法(win10重装系统后网卡没了)

    win10重装系统后无法进入系统解决方法(win10重装系统后网卡没了)

  • 最贵的iPad配件是什么(最贵的苹果平板)

    最贵的iPad配件是什么(最贵的苹果平板)

  • PyTorch+PyG实现图神经网络经典模型目录(pytorch example)

    PyTorch+PyG实现图神经网络经典模型目录(pytorch example)

  • Python统计学11——分位数回归(python 统计学包)

    Python统计学11——分位数回归(python 统计学包)

  • 汇算清缴加计扣除表
  • 增值税专用发票的税率是多少啊
  • 外商投资合伙企业的性质与特征
  • 个税申报错误已过申报期怎么修改
  • 合营企业和联营企业会计核算
  • 什么情况下当月不排卵
  • 捐赠的费用放在什么科目
  • 公司开户费用都包括哪些
  • 个人部分社保怎么计算
  • 滴滴的发票能不能作废
  • 出差怎么订机票
  • 准予扣除的职工福利费
  • 房屋租赁费属于什么会计分录
  • 确认社保局工伤赔款会计分录
  • 新企业如何办理税务登记
  • 当月支付租金没有发票
  • 银行询证函回函是什么意思
  • 收到社保局生育津贴
  • 发票抄报逾期如何处罚
  • 生产企业出口退税退的是哪部分的税
  • 防暑降温费可以用工会经费吗
  • 小规模纳税申报表下载
  • 免抵税额增值税主表体现到哪里的
  • 母公司的注册资金比子公司少可以么
  • 外商企业需要交企业所得税吗
  • 非居民企业租赁增值税
  • 个税手续费收入要交税吗
  • 专家费收取多少合适
  • 腾讯电脑管家中蓝牙在哪
  • world超链接
  • 简易计税的方式
  • php html5
  • linux和windows的区别和联系
  • 其他暂收和应付账款区别
  • 购入旧的固定资产的入账价值
  • 供应商发票多开了怎么处理?
  • php结果以什么形式返回
  • nodejs hook
  • vue.js简介
  • 增值税主要内容
  • 开启php
  • tomcat结构图
  • mysql使用技巧
  • 成品油涉及范围有哪些
  • 边际贡献总额什么意思
  • 增值税不用计提吗
  • 营改增后,建筑行业与供应商签合同才怎样签没风险?
  • 用友t6反记账步骤
  • 进项发票的作用
  • 有限责任公司和有限公司区别在哪
  • 办公室用茶叶怎么入账
  • 资产负债表的资产按流动性大小排列
  • 商业承兑汇票结算会计分录
  • 出口视同内销如何申报?
  • 以前年度收入少记了怎么做分录
  • vhd 打开
  • 戴尔笔记本电脑开不了机
  • os x10.10.5 beta下载 mac os x10.10.5beta官方下载地址
  • macbookair自带系统
  • window资源管理器
  • windows10周年更新
  • centos7添加ip地址
  • scsiaccess.exe - scsiaccess是什么进程 有什么用
  • win8鼠标指针不见了
  • android开发环境搭建实验报告总结
  • 批处理显示
  • unity3d inspector
  • node.js怎么用
  • vue vue cli
  • koa和express的区别
  • json数据格式的理解
  • 电子税务局可以开纸质发票吗
  • 税务催告期限多久
  • 不予税务行政许可
  • 上海餐饮增值税
  • 广东广电网络投诉电话
  • 上海税务局怎么变更财务负责人
  • 厦门税务地区编号
  • 长沙税务注销公示期是多久
  • 德国对外投资法律劣势有哪些方面
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设