react 的 refs 原理及应用 详细介绍

refs 的在哪?

  • refs 是你在创建类组件的时候从 React.component 中继承而来的
    在这里插入图片描述

refs 使用说明

  • 在 vue 中也有 refs 的概念
  • 其实就是把 model(vdom) 层当中的东西渲染到我们的 view(dom) 层时
  • refs 引用的就是真实的 dom

refs 在什么场景操作真实 dom?

我在市面上看到了一些操作动画库的第三方库或者一些操作其他场景时我需要操作真实 dom 的时候,需要把这些业务交给第三方库的时候,我们才回去使用 ref 去引用这些 dom

有些像我们在原生的时候,给它一个 id 我们就可以 getElementById 获取元素,所以我们给它一个 ref 就可以通过 refs 这个属性去引用到 ref ,拿到的就是 dom 元素,就可以做一些只有真实 dom 才能操作的业务,这就是 ref 的一个使用场景

refs 介绍

需要抓取dom元素与第三方 DOM 库集成

  • 触发命令式动画
  • 管理焦点
  • 文本选择或媒体播放
  • dom 只能在浏览器 Navigator 才可能出现 dom 这个概念,才能够进行上述操作(比如在浏览器里面才有焦点,我们不可能在虚拟 dom 下进行操作,虚拟 dom 只是在管理我们被虚拟之后的一个 documnet)
  • ref 就是给我们操作真实 dom 提供了一个入口

refs 用法

//1. 通过字符串去引用,跟 vue 时一模一样的
<jsx元素 ref="名字"...
this.refs.名字
//2. 实例化
this.firstRef = React.createRef() //发生在构造器
<jsx ref={
   this.firstRef} />
  
this.firstRef 访问 -{
   current:dom}
//3. callback refs  回调  (其实还有第四个转发,较复杂,这里未列出)
<jsx ref={
   el => this.定义一个实例属性 = el}
this.定义一个实例属性  //后期用作访问jsx元素
  • 当组件挂载时,将 DOM el元素传递给 ref 的回调
  • 当组件卸载时,则会传递 null。
  • ref 回调会在 componentDidMount 和 componentDidUpdate 生命周期之前调用
vue 通过指令去操作真实 dom ,react 中就是用 ref 去引,引完以后你想使用 原生还是 第三方的库 随意

refs 用法(一)

//1. 通过字符串去引用,跟 vue 时一模一样的
<jsx元素 ref
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Refs 是 React 提供的一种访问 DOM 元素或组件实例的方法。通过 Refs,我们可以在组件中直接访问到被 Refs 引用的 DOM 元素或组件实例,从而进行一些特殊的操作。 下面,我来举一个 React Refs 的案例: 假设我们有一个 Input 组件,需要在组件加载完毕后自动获取焦点,我们可以通过 Refs 来实现这个功能。具体的实现步骤如下: 1. 在 Input 组件中定义 Refs: ```jsx class Input extends React.Component { constructor(props) { super(props); this.inputRef = React.createRef(); // 创建 Refs } render() { return <input type="text" ref={this.inputRef} />; } } ``` 2. 在 componentDidMount 生命周期中,使用 Refs 获取到 input 元素,并调用 focus() 方法: ```jsx class Input extends React.Component { constructor(props) { super(props); this.inputRef = React.createRef(); // 创建 Refs } componentDidMount() { this.inputRef.current.focus(); // 获取 input 元素并获取焦点 } render() { return <input type="text" ref={this.inputRef} />; } } ``` 这样,当 Input 组件加载完毕后,它的 input 元素就会自动获取焦点了。 注意,Refs 只能在类组件中使用,不能在函数式组件中使用。另外,Refs 的值可以是回调函数,而不仅仅是 React.createRef() 方法返回的对象。如果使用回调函数的方式,可以在回调函数中访问到组件实例或 DOM 元素,例如: ```jsx class Input extends React.Component { constructor(props) { super(props); this.inputRef = null; // 创建 Refs this.setInputRef = element => { this.inputRef = element; }; } componentDidMount() { this.inputRef.focus(); // 获取 input 元素并获取焦点 } render() { return <input type="text" ref={this.setInputRef} />; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值