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

一文讲清楚React中Refs的应用

文章目录

  • 一文讲清楚React中Refs的应用
  • 1. React Refs是什么
  • 2. Refs的使用
  • 2.1 ref={this.myRef}
    • 2.2 ref={fn()}
    • 2.3 ref={hook}

一文讲清楚React中Refs的应用

1. React Refs是什么

  • 简单来说,Refs提供了一种访问DOM节点或者组件实例的方法
  • 就好比我们在原生开发中的id一样,我们可以通过document.getElementById拿到对应的DOM节点
  • Refs干的就是这个事
  • Refs的本质是ReactDOM.render()返回的组件实例,如果是渲染组件,返回饭组件实例,如果是渲染DOM,则返回DOM节点

2. Refs的使用

  • Refs的使用跟id的使用是类似的,就是在HTML元素或者组件上创建ref属性并进行赋值
  • 不同的是,ref的属性值需要使用React.createRef来创建
  • 所以ref属性值会有三种形态

2.1 ref={this.myRef}

import React from 'react'
class App extends React.Component{constructor(props){super(props)this.myRef=React.createRef()}handleClick=()=>{this.myRef.current.innerHTML='new value set by Ref'}render(){return(<div><div ref={this.myRef}>I am div of Ref</div><button onClick={this.handleClick}>set new value by ref</button></div>)}
}
export default App
  • 通过this.myRef.current获取当前实例

2.2 ref={fn()}

import React from 'react'
class App extends React.Component{constructor(props){super(props)this.myRef=React.createRef()}handleClick=()=>{this.myRef.innerHTML='new value set by Ref'}render(){return(<div><div ref={e=>this.myRef=e}>I am div of Ref</div><button onClick={this.handleClick}>set new value by ref</button></div>)}
}
export default App
  • 如果ref传入的是函数,回调函数的参数会传入一个元素对象,然后通过实例将对象进行保存,通过this.myRef直接获取到实例

2.3 ref={hook}

  • 在hooks模式下,我们直接传入一个hook
import React,{useRef} from 'react'
function App(prop){const myRef=useRef()return(<div><div ref={myRef}>I am div of Ref</div><button onClick={()=>{ myRef.current.innerHTML='new value set by Ref' }}>set new value by ref</button></div>)
}
export default App
  • 通过myRef.current获得实例
http://www.xdnf.cn/news/14854.html

相关文章:

  • 成为git砖家(12): 看懂git合并分支时冲突提示符
  • Python 机器学习核心入门与实战进阶 Day 3 - 决策树 随机森林模型实战
  • vue 条件渲染(v-if v-else-if v-else v-show)
  • 时域与频域信号特性分析——DFT归一化与双边谱合并分析
  • Kali Linux Wifi 伪造热点
  • SpringBoot:整合quartz实现定时任务-集群化配置
  • 温湿度变送器与电脑进行485通讯连接并显示在触摸屏中(mcgs)
  • Visual Studio 2022 MFC Dialog 添加Toolbar及Tips提示
  • 【算法刷题记录(简单题)002】字符串字符匹配(java代码实现)
  • 补充:问题:CORS ,前后端访问跨域问题
  • Java Go SDK 管理工具与最佳实践
  • 《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
  • PageRank:互联网的马尔可夫链平衡态
  • CSS 文字浮雕效果:巧用 text-shadow 实现 3D 立体文字
  • 【内存】Linux 内核优化实战 - net.ipv4.tcp_tw_reuse
  • springBoot接口层时间参数JSON序列化问题,兼容处理
  • STM32F103RCTx的PWM输出控制电机
  • Matplotlib 安装部署与版本兼容问题解决方案(pyCharm)
  • 共射级放大电路的频率响应Multisim电路仿真——硬件工程师笔记
  • C++11 forward_list 从基础到精通:原理、实践与性能优化
  • 利用 AI 打造的开发者工具集合
  • 高档宠物食品对宠物的健康益处有哪些?
  • Python-GUI-wxPython-布局
  • python打卡day59@浙大疏锦行
  • 应急响应靶场——web3 ——知攻善防实验室
  • docker运行的一些常用命令
  • 使用alist+RaiDrive+webdav将百度夸克网盘变为本地电脑磁盘方法教程
  • 基于led框架及gpiolib管理的驱动编写
  • git教程-pycharm使用tag打标签
  • Mint密室 · 猫猫狐狐的“特征选择”囚室逃脱