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

17.React获取DOM的方式

3. 获取DOM方式refs

  • 3.1. 如何使用Ref
      1. 在React的开发模式中,通常情况下不需要、也不建议直接操作原生DOM,但是某些特殊的情况,确实需要获取到DOM进行某些操作;
      • 1.1. 管理焦点,文本选择或媒体播放;
      • 1.2. 触发强制动画;
      • 1.3. 集成第三方DOM库;
      • 1.4. 我们可以通过refs获取DOM;
      1. 如何创建refs来获取对应的DOM呢?目前有三种方式:
      • 2.1. 方式一: 在React元素上绑定一个ref字符串(这种方式获取ref元素会被废弃,不推荐使用)
      • 2.2. 方式二: 提前创建好ref对象createRef(), 将创建出来的对戏那个绑定到元素上(推荐使用这种方式)
      • 2.3. 方式三: 传入一个回调函数,在对应的元素被渲染之后,回调函数被执行,并且将元素传入
      • 2.4. 示例代码如下:
          import React, { PureComponent, createRef } from 'react'export class App extends PureComponent {constructor() {super()this.state = {}// 1. 创建的ref不涉及页面更新的东西,不涉及到渲染的东西this.titleRef = createRef()this.titleEl = null}getNativeDom () {// 不建议这样拿原生dom// const h2El = document.querySelector('h2')// 1. 方式一: 在React元素上绑定一个ref字符串(这种方式获取ref元素会被废弃,不推荐使用)// console.log(this.refs.why)// 2. 方式二: 提前创建好ref对象,createRef(), 将创建出来的对戏那个绑定到元素上(推荐使用这种方式)// console.log(this.titleRef.current)// 3. 方式三: 传入一个回调函数,在对应的元素被渲染之后,回调函数被执行,并且将元素传入console.log(this.titleEl)}render() {return (<div><h2 ref='why'>Hello World</h2><div ref={this.titleRef}>你好啊,李银河</div>{/* 传入一个函数,当元素渲染出来之后自动回调这个函数,回调函数时并把元素作为参数传递给这个函数 */}<div ref={el => this.titleEl = el }>你好啊,世界</div><button onClick={(e) => this.getNativeDom()}>获取ref元素</button></div>)}}export default App
        
  • 3.2. ref获取类组件实例
      1. 类组件的ref获取方式和绑定元素类似,通过ref属性绑定组件实例
      1. 示例代码如下:
        import React, { PureComponent, createRef } from 'react'export class HelloWorld extends PureComponent {test () {console.log('------')}render() {return (<div><h2>Hello World!</h2></div>)}}export class App extends PureComponent {constructor() {super()this.state = {}// 1. 创建的ref不涉及页面更新的东西,不涉及到渲染的东西this.hwRef = createRef()}getComponent () {console.log(this.hwRef.current)this.hwRef.current.test()}render() {return (<div><HelloWorld ref={this.hwRef} /><button onClick={(e) => this.getComponent()}>获取组件实例</button></div>)}}export default App
  • 3.3. ref获取函数组件(ref的转发)
      1. 在前面我们学习ref时讲过,ref不能应用于函数式组件;
      • 1.1. 因为函数式组件没有实例,所以不能获取对应的组件对象
      1. 但是,在开发中我们可能想要获取函数式组件中某个元素的DOM,这个时候我们应该如何操作呢?
      • 方式一: 直接传入ref属性(错误的做法)
      • 方式二: 通过forwardRef()高阶函数
      1. 示例代码如下:
        import React, { PureComponent, createRef, forwardRef } from 'react'const HelloWorld = forwardRef (function (props, ref) {// 1. 在前面学习的ref,ref不能应用于函数式组件//  - 1.1. 函数式组件没有实例,所以不能获取对应的组件对象;// 2. 通过forwardRef高阶函数;return (<div><h2  ref={ref}>Hello World!</h2><p>哈哈哈</p></div>)})export class App extends PureComponent {constructor() {super()this.state = {}// 1. 创建的ref不涉及页面更新的东西,不涉及到渲染的东西this.hwRef = createRef()}getComponent () {console.log(this.hwRef.current)}render() {return (<div><HelloWorld ref={this.hwRef} /><button onClick={(e) => this.getComponent()}>获取函数组件实例</button></div>)}}export default App
      
  • 3.4. ref的类型
      1. ref的值根据节点的类型而有所不同
      • 1.1. 当ref属性用于HTML元素时,构造函数中使用React.createRef()创建的ref接受底层DOM元素作为其current属性
      • 1.2. 当ref属性用于自定义class组件时,ref对象接收组件的实例作为其current属性
      • 1.3. 不能在函数组件上使用ref属性,因为他们没有实例
      1. 函数组件是没有实例的,所以无法通过ref获取他们的实例:
      • 2.1. 但是某些时候,我们可能想要获取函数式组件中的某个DOM元素;
      • 2.2. 这个时候我们可以通过React.forwardRef(), 当ref属性用于通过forwardRef转发的函数式组件时,ref对象接收组件内部转发的具体元素或组件实例作为其current属性。
      • 2.3. 后面还会记录到hooks中如何使用ref;
http://www.dtcms.com/a/553064.html

相关文章:

  • 编码器读写操作方式
  • WEB服务
  • 2025年10月31日 AI大事件
  • Rust开发中泛型结构体定义与使用(通用容器)
  • 9-SpringCloud-服务网关 Gateway-高级特性之 Filter-2
  • Electron中使用exceljs+Node模块编写
  • 优秀服装网站设计业务接单网站
  • 构造/析构/赋值运算理解
  • 给予虚拟成像台尝鲜版九,支持 HTML 原型模式
  • 区块链技术在生产数据管理中的应用:Hyperledger Fabric与蚂蚁链智能合约设计
  • 可以用手机建设网站吗wordpress程序
  • deepin Ubuntu/Debian系统 环境下安装nginx,php,mysql,手动安装,配置自己的项目
  • SDC命令详解:使用set_dont_touch_network命令进行约束
  • CI/CD(三)—— 【保姆级实操】Jenkins+Docker GitLab+Tomcat 实现微服务CI/CD全流程部署
  • 20. Portals和Fragment
  • 企业网站管理wordpress必备插件
  • 数据结构之栈和队列-栈
  • 操作系统-线程
  • sward零基础学习,创建第一个知识库
  • 门户网站建设方式网站制作叫什么
  • step-ca 证书生成完整步骤指南
  • 从字节码生成看 Lua VM 前端与后端协同:编译器与执行器衔接逻辑
  • SQLite3语句以及FMDB数据存储初步学习
  • 抽奖网站怎么制作长沙人力资源招聘网
  • IntelliJ IDEA 远程断点调试完全指南
  • uniapp使用sqlite模块
  • Lua--数据文件和持久性
  • Spark SQL 解锁电商数据密码:窗口函数大显身手
  • 用R语言生成指定品种与对照的一元回归直线(含置信区间)
  • NVR(网络视频录像机)和视频网关的工作方式