位置: 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,现在怎么样了?(真正的出道仙谁来封)

  • xbox录屏文件在哪里(xbox录屏位置)

    xbox录屏文件在哪里(xbox录屏位置)

  • 全选复制快捷键ctrl加什么(全选复制快捷键是什么)

    全选复制快捷键ctrl加什么(全选复制快捷键是什么)

  • 苹果系统可以改微信号吗(苹果系统可以改成安卓系统)

    苹果系统可以改微信号吗(苹果系统可以改成安卓系统)

  • 计算机双引号怎么打出来(计算机双引号怎么打)

    计算机双引号怎么打出来(计算机双引号怎么打)

  • 华为p40悬浮球设置在哪里(华为p40悬浮球如何添加常用功能)

    华为p40悬浮球设置在哪里(华为p40悬浮球如何添加常用功能)

  • 快手闪回啥意思(快手公屏上闪回是啥意思)

    快手闪回啥意思(快手公屏上闪回是啥意思)

  • 红包什么时候退回(红包多长时间退)

    红包什么时候退回(红包多长时间退)

  • 栈先进先出还是先进后出(栈是后进先出吗)

    栈先进先出还是先进后出(栈是后进先出吗)

  • 淘宝美工是做什么的工作内容(淘宝美工干啥的)

    淘宝美工是做什么的工作内容(淘宝美工干啥的)

  • 操作过于频繁,请稍后再试(操作过于频繁不能自助解冻)

    操作过于频繁,请稍后再试(操作过于频繁不能自助解冻)

  • 转转能申请退款几次(转转申请退款几天自动退款)

    转转能申请退款几次(转转申请退款几天自动退款)

  • 手机锁屏怎么取消(手机锁屏怎么取消掉)

    手机锁屏怎么取消(手机锁屏怎么取消掉)

  • 快手一天限制发作品么(快手每天发作品数量限制)

    快手一天限制发作品么(快手每天发作品数量限制)

  • nex3有没有无线充电(vivo nex 3s有无线充电吗)

    nex3有没有无线充电(vivo nex 3s有无线充电吗)

  • 计算机中数据的表示形式是(计算机中数据的存贮和运算采用的是( ))

    计算机中数据的表示形式是(计算机中数据的存贮和运算采用的是( ))

  • 家庭组网用fat还是fit模式(家庭组网用光纤还是网线)

    家庭组网用fat还是fit模式(家庭组网用光纤还是网线)

  • cc9e有快充吗(cc9e支持快充么)

    cc9e有快充吗(cc9e支持快充么)

  • 为什么抖音不能美颜了(为什么抖音不能保存到本地相册)

    为什么抖音不能美颜了(为什么抖音不能保存到本地相册)

  • 红米note8pro怎么设置手电筒快捷键(红米note8pro怎么恢复出厂设置)

    红米note8pro怎么设置手电筒快捷键(红米note8pro怎么恢复出厂设置)

  • 拼多多的那个猪怎么取消(拼多多的猪肉是真的吗)

    拼多多的那个猪怎么取消(拼多多的猪肉是真的吗)

  • 华为数字耳机有什么用(华为数字耳机什么意思)

    华为数字耳机有什么用(华为数字耳机什么意思)

  • 苹果xs双网通和公开版的区别

    苹果xs双网通和公开版的区别

  • 共享单车骑行需注意哪些(骑共享单车需要驾照吗)

    共享单车骑行需注意哪些(骑共享单车需要驾照吗)

  • 小米手环3黑屏怎么处理(小米手环3黑屏无法唤醒)

    小米手环3黑屏怎么处理(小米手环3黑屏无法唤醒)

  • 为什么airpods连不上(为什么airpods连上没有声音)

    为什么airpods连不上(为什么airpods连上没有声音)

  • 及格人数怎么算excel(excel各科及格人数怎么算)

    及格人数怎么算excel(excel各科及格人数怎么算)

  • 小辣椒怎么刷机(小辣椒如何刷机)

    小辣椒怎么刷机(小辣椒如何刷机)

  • 华为鸿蒙系统怎么补电?鸿蒙系统补电操作步骤教程(华为鸿蒙系统怎么开启)

    华为鸿蒙系统怎么补电?鸿蒙系统补电操作步骤教程(华为鸿蒙系统怎么开启)

  • 电脑中毒如何处理?(电脑中毒如何处理)

    电脑中毒如何处理?(电脑中毒如何处理)

  • 图像工程:红外图像增强(红外图像识别算法)

    图像工程:红外图像增强(红外图像识别算法)

  • 金税盘版开票软件怎么升级
  • 增值税电子发票可以作废吗
  • 进项税转出的会计凭证
  • 税务师考试税法一章节
  • 建筑企业可以挂靠吗
  • 计入税金及附加的税种口诀
  • 收购发票加计扣除
  • 年初未分配利润和年末未分配利润的关系
  • 会务费税前扣除材料
  • 2019未达起征点免税分录
  • 股东股权比例怎么分配
  • 高新技术企业认定
  • 普通发票开折扣销售能冲减销售吗
  • 小规模纳税人帮别人报关
  • 公司与公司之间合作协议
  • 应付职工薪酬账务处理例题
  • 贴息收入什么意思
  • 收到厂家的销售返利 税收
  • 固定资产的知识
  • 产品成本的归集和分配是什么意思
  • 纳税人为风险纳税人
  • 发票报销的补助是否缴纳个人所得税?
  • 报完税后反结账调整主营业务收入可以吗?
  • 小规模季度超了9万怎么报增值税
  • 费用类有什么科目
  • 银行存款二级明细科目有哪些
  • 期初建账实验步骤
  • 收到的会费计入什么会计科目
  • 买卖房子归谁管
  • 进口增值税计入关税完税价格吗
  • 哪些税金计入存货成本
  • win10更新windows
  • 资产处置损益是什么科目
  • 小规模纳税人无票收入免税吗
  • linux安装tk
  • 会计科目在建工程有金额要求吗
  • 以下哪些企业需要填报
  • 用java做项目
  • 哪些情形不属于伪现金
  • php的正则表达式
  • 公司向职工借款利息需要交税吗
  • 委托加工业务的组成计税价格
  • 简单了解航天员的生活
  • zend框架教程
  • laravel 更新数据
  • python 如何学
  • php递归函数桃子一天吃一半
  • 去年多计提的所得税怎么调整
  • 可转换优先股会稀释股权吗
  • 常见的数据库管理系统有
  • 增值税征收类型
  • 公司贷款可以转私户吗
  • 物业建车棚谁出钱
  • 营利性养老机构有补贴吗
  • 土地使用税和房产税是一起的吗
  • 公司买茶具帐务处理流程
  • 直租业务可以抵房租吗
  • 企业增资还需要增资账户么
  • 建账选用什么会计制度
  • 日记账的设置和登记
  • ipv6文件
  • 注册表被锁定后的处理方法
  • ubuntu怎么安装包
  • 电脑网络唤醒功能
  • winctlad.exe - winctlad是什么进程
  • ensmix32.exe进程安全吗 ensmix32进程是什么文件产生的
  • win10新版cortana
  • macos终端命令
  • Linux mysql如何更改root密码以及忘记root密码的修改方法
  • win7怎么打开磁盘管理器
  • win7正版提示
  • C#绘制准心脚本
  • python 解析
  • 批处理转义字符如何
  • python3解析json
  • 原生js实现promise.all
  • 国家税务总局青海省税务局
  • 缴款书的基本内容
  • 国税局地税局
  • 工商变更与税务变更为什么不能同步
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设