位置: 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 插件(实现扩展功能的快捷键)

  • 红米k30pro的屏幕指纹在哪里(红米k30pro的屏幕是三星的吗)

    红米k30pro的屏幕指纹在哪里(红米k30pro的屏幕是三星的吗)

  • 在钉钉下载的文件在哪里(在钉钉下载的文件在哪)

    在钉钉下载的文件在哪里(在钉钉下载的文件在哪)

  • 苹果半年电池损耗多少正常(苹果半年电池损耗91)

    苹果半年电池损耗多少正常(苹果半年电池损耗91)

  • 手机腾讯视频怎么登录别人的VlP(手机腾讯视频怎么看不了)

    手机腾讯视频怎么登录别人的VlP(手机腾讯视频怎么看不了)

  • 怎么强制解除对方拉黑(怎么强制解除对方拉黑的软件)

    怎么强制解除对方拉黑(怎么强制解除对方拉黑的软件)

  • 三星A60开不了机(三星a60开不了机怎么回事)

    三星A60开不了机(三星a60开不了机怎么回事)

  • 闲鱼怎么让某人看不到(闲鱼怎么让某人看不到我的主页)

    闲鱼怎么让某人看不到(闲鱼怎么让某人看不到我的主页)

  • kindle闪屏是怎么回事(kindle闪屏什么意思)

    kindle闪屏是怎么回事(kindle闪屏什么意思)

  • qq等级pk对方看得到吗(qq等级pk在哪里)

    qq等级pk对方看得到吗(qq等级pk在哪里)

  • airpods弹窗不灵敏(airpods弹窗不灵敏怎么办)

    airpods弹窗不灵敏(airpods弹窗不灵敏怎么办)

  • 双下划线怎么设置(双下划线怎么设置 双下划线怎么弄)

    双下划线怎么设置(双下划线怎么设置 双下划线怎么弄)

  • 微信支付怎么设置刷脸(微信支付怎么设置指纹)

    微信支付怎么设置刷脸(微信支付怎么设置指纹)

  • 在word2010中的对象翻转或旋转适用于什么(在word2010文档中可选用的段落对齐方式)

    在word2010中的对象翻转或旋转适用于什么(在word2010文档中可选用的段落对齐方式)

  • 组合键怎么按(ppt组合键怎么按)

    组合键怎么按(ppt组合键怎么按)

  • 淘宝申请退款淘金币会返还吗(淘宝申请退款淘宝介入后多久处理完)

    淘宝申请退款淘金币会返还吗(淘宝申请退款淘宝介入后多久处理完)

  • vivoz5x有红外线功能吗(vivoz5红外线在哪)

    vivoz5x有红外线功能吗(vivoz5红外线在哪)

  • 如何查看微博缓存的视频(怎么查看微博缓存内容)

    如何查看微博缓存的视频(怎么查看微博缓存内容)

  • 1.5v电池是几号(aar6p1.5v电池是几号)

    1.5v电池是几号(aar6p1.5v电池是几号)

  • 网速下降1mbps是什么(网速下降到1m)

    网速下降1mbps是什么(网速下降到1m)

  • qq卸载多久显示不在线(qq卸载了是什么状态)

    qq卸载多久显示不在线(qq卸载了是什么状态)

  • 天猫魔盒蓝牙没有了怎么办(天猫魔盒找不到蓝牙设置)

    天猫魔盒蓝牙没有了怎么办(天猫魔盒找不到蓝牙设置)

  • 苹果oled和lcd区别(苹果的oled和lcd)

    苹果oled和lcd区别(苹果的oled和lcd)

  • mimi完成怎么取消(mimi已完成是什么意思)

    mimi完成怎么取消(mimi已完成是什么意思)

  • 拼多多拼单是啥意思(拼多多拼单是啥意思,发货时间)

    拼多多拼单是啥意思(拼多多拼单是啥意思,发货时间)

  • 芒果vip怎么取消续费(芒果vip怎么取消连续包月)

    芒果vip怎么取消续费(芒果vip怎么取消连续包月)

  • 怎么看黑名单电话(怎么看黑名单电话有没有打进来)

    怎么看黑名单电话(怎么看黑名单电话有没有打进来)

  • 手机软件停止运行怎么办(手机软件停止运行)

    手机软件停止运行怎么办(手机软件停止运行)

  • 嵌入式软件产品即征即退
  • 小规模销售产品会计分录
  • 企业所得税的营业成本
  • 理财产品分红和不分红的区别
  • 企业所得税退抵税费申请(汇算清缴)怎么撤销
  • 税后平均投资利息怎么算
  • 代账公司需要做报表吗
  • 购入库存商品未付款怎么做账
  • 企业报税盘入账应该记入哪个科目
  • 会计核算体系的重要性
  • 退休后补发退休前的工资需要扣社保吗
  • 上年留抵税,次年抵扣分录
  • 无形资产内部研究开发支出的确认和计量
  • 集团内部拨付的研发经费如何核算?
  • 用于文化活动费用的科目
  • 其他应收款包括的内容
  • 员工借备用金怎么写摘要
  • 建筑企业在境外施工税收一共包括几个部分
  • 研发费加计扣除75%政策
  • 异常增值税扣税凭证
  • 银行承兑汇票企业账户没钱
  • 企业收入不进公账怎样做账?
  • 怎么给自己的宽带改名字
  • 手动ghost还原硬盘
  • linux用途是什么
  • 上半年的业务总结几句话
  • php中如何使用session
  • 支付航天开票技术服务费280
  • 前端解决方案
  • PHP:oci_cancel()的用法_Oracle函数
  • win7系统文件在哪里可以找到
  • php获取api内容
  • 企业接受外单位投入的材料一批,应编制()
  • 个人转让公司限额多少
  • react hook详解
  • 预收账款和应收账款的账务处理
  • thinkphp 模块
  • 产品出库单附在什么凭证后面
  • 怎么保证发票是真的
  • 小微企业所得税如何填报
  • 预付卡做账吗
  • 分页 php
  • 织梦模板安装完整教程
  • 增值税开票系统客服电话
  • 个体户电子申报税流程
  • 税务申报残保金
  • 物业合并利润表怎么填
  • sql server 2005安装失败
  • 个体工商户营业执照注销流程
  • 我们可以收到很多礼物
  • SQL Server实时同步更新远程数据库遇到的问题小结
  • 红字转账凭证怎样录入
  • 内账会计的主要工作
  • 嵌入式软件产品应纳税额
  • 小规模纳税人租赁发票税率是多少
  • 未抵扣进项税额转出会计分录
  • 客户从公司借钱怎么拒绝
  • 一般纳税人提供劳务税率是多少
  • 工程未竣工可以出竣工报告吗
  • sql查询树形结构
  • sql server常规错误
  • sql提取指定字符串
  • 通过zeno实现加速屏幕显示操作教程
  • ubuntu软件安装
  • centos进入
  • 关于操作系统的叙述中
  • Ubuntu下VirtualBox的vdi文件克隆方法
  • 苹果电脑怎么打开u盘
  • win8出现问题需要重启
  • quickdcf.exe - quickdcf是什么进程 作用是什么
  • mac双系统怎么调整磁盘空间
  • win8.1开始菜单怎么改成win7那样
  • linux系统的安装步骤
  • unity描边shader
  • 解决胃胀气最快方法
  • javascript如何定义变量
  • jquery打开本地html
  • android 重启app
  • 浅谈JQuery+ajax+jsonp 跨域访问
  • auto.js获取剪切板内容
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设