位置: IT常识 - 正文

React中ref的使用方法和使用场景(详解)(react.fc)

编辑:rootadmin
React中ref的使用方法和使用场景(详解) 摘要

推荐整理分享React中ref的使用方法和使用场景(详解)(react.fc),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react ref,react中ref的用法,react form ref,react.fc,react.fc,react form ref,react.fc,react中的refs,内容如对您有帮助,希望把文章链接给更多的朋友!

不管在Vue中还是React,如果我们想使用一个元素的DOM,不需要通过JS中操纵DOM的方法,它们提供了一个专属的API就是ref。

而Vue中的ref可能比较简单,这一篇主要讲一下如何在React中使用ref,以及使用ref的场景。

1.ref的挂载

在React中,ref可以挂载到html元素上,同时也可以挂载在React元素上,看下面的代码:

import React, { Component } from 'react'// import { findDOMNode } from 'react-dom'import Child from './Child'export default class Father extends Component { componentDidMount(){ console.log(this.refs.refElement); console.log(this.refs.child); } render() { return ( <div> <input ref={ 'refElement' }></input> <Child ref={ 'child' }/> <button onClick={this.fn}>123</button> </div> ) }}

控制台的打印为:

可以看到,在React中,ref是可以挂载到HTML元素和React元素上的。

(1)挂载HTML元素,返回真实的DOM (2)挂载React元素,返回render后的实例对象

React中ref的使用方法和使用场景(详解)(react.fc)

同时React也提供了一个方法findDOMNode可以将React元素的ref返回变成真实的DOM元素。

import { findDOMNode } from 'react-dom' console.log(findDOMNode(this.refs.child));

同时在上面的代码我们也可以看出来,ref的挂载是在componentDidMount等生命周期之前执行的。

2.使用ref的三种方式

(1)字符串的方式

import React, { Component } from 'react'export default class Father extends Component { componentDidMount(){ console.log(this.refs.refElement); } render() { return ( <div> <input ref={ 'refElement' }></input> <button onClick={this.fn}>123</button> </div> ) }}

这种方式和Vue的ref比较相似,但是官方目前已经不推荐使用该方式,后续可能还会废弃。

(2)函数的方式

import React, { Component } from 'react'export default class Father extends Component { componentDidMount(){ console.log(this.refElement); } render() { return ( <div> <input ref={ ref => this.refElement = ref }></input> <button onClick={this.fn}>123</button> </div> ) }}

(3)react.CreateRef的方式

import React, { Component } from 'react'export default class Father extends Component { refElement = React.createRef(); componentDidMount(){ console.log(this.refElement.current); } render() { return ( <div> <input ref={this.refElement}></input> <button onClick={this.fn}>123</button> </div> ) }}

记住这里面通过refElement中的current,获取真实的DOM元素。

3.ref的使用场景

这里我们说一个比较常见的场景,就是点击按钮让输入框聚焦:

import React, { Component } from 'react'export default class Father extends Component { refElement = React.createRef(); componentDidMount(){ console.log(this.refElement.current); } fn = ()=>{ this.refElement.current.focus(); } render() { return ( <div> <input ref={this.refElement}></input> <button onClick={this.fn}>聚焦</button> </div> ) }}

通过获取DOM后,调用DOM上的focus方法API,来让input框进行聚焦。

同时ref也可以适用于一些DOM元素的动画效果,例如移动,变大变小,都需要通过ref来控制DOM,进行操作。

本文链接地址:https://www.jiuchutong.com/zhishi/299288.html 转载请保留说明!

上一篇:Vue3 从入门到放弃 (第一篇.环境准备)(vue3的)

下一篇:出道即封神的ChatGPT,现在怎么样了?(真正的出道仙谁来封)

  • macbook如何卸载软件(macbook如何卸载第三方软件)

  • 抖音开通了合众易宝怎么关闭(抖音开通了合众易宝安全吗)

  • vivo x27录屏怎么关闭小白点(vivox27录屏怎么把声音录进去)

  • 移动花卡如何激活免流(移动花卡如何激活腾讯视频免流)

  • 手机距离感应器重要吗(手机距离感应器坏了影响大吗)

  • 谷歌账号申诉理由怎么写(谷歌账号申诉理由怎么写中文)

  • 微视可以开通直播吗

  • 淘宝切换账号最多几个(淘宝切换账户最多可以保留几个)

  • 如何找回抖音已删视频(如何找回抖音已删除的私信聊天记录)

  • 刷梅林固件是什么意思(刷完梅林固件怎么进入设置)

  • 华为手机抖音没有声音怎么回事(华为手机抖音没有声音怎么办)

  • 为什么充话费不到账(为什么充话费不能自定义金额)

  • vivo恢复出厂设置后,激活需要密码怎么办?(vivo恢复出厂设置密码多少)

  • 抖音为啥美颜不见了(抖音里面的美颜不好怎么办)

  • 微信扫一扫加好友记录怎么查(微信扫一扫加好友多久过期)

  • 计算机网络拓扑主要指(计算机网络拓扑结构主要取决于它的什么)

  • 手机账号密码是什么(手机账号密码是啥)

  • 淘宝首页怎么回原版界面(淘宝首页怎么找)

  • 手机突然黑屏开不了机(手机突然黑屏开不了机充电也没反应)

  • 蓝墨云怎么关闭定位(蓝墨云签到关闭定位)

  • kindle怎么看卡索引(kindle怎么看caj)

  • qq删除的好友在哪里可以找到(qq删除的好友在哪里看)

  • breeno怎么关闭(breeno怎样关闭)

  • 华为云空间是干嘛的(华为云空间是干什么的软件)

  • 小爱触屏音箱如何设置视频闹钟(小爱触屏音箱如何安装第三方软件)

  • 世界著名气泡酒产地普罗塞克山丘,意大利威尼托 (© Olimpio Fantuz/Sime/eStock Photo)(世界著名气泡酒公司)

  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设 电脑维修 湖南楚通运网络