0204refs详解-组件-React
创始人
2025-05-29 05:14:17
0

1 概述

组件内的标签通过定义ref属性来标识自己。

做一个小实例,如下图所示:

在这里插入图片描述

两个输入框,第一个输入框输入内容,点击后面按钮,弹窗显示输入内容;第二输入框,失去焦点弹窗显示输入内容。

这里我需要获取页面DOM input,进而获取输入框内容,下面我来看看在react怎么怎么做。

1 字符串形式refs

示例代码如下:


0801_字符串形式refs

字符串形式refs格式:

// refs 声明
<标签 ref="xxx" />
// refs 使用
this.refs.xxx

this.refs.xxx表示的不是虚拟DO M,而是虚拟DOM转化后的真实DOM。

2 回调形式refs

2.1 基本使用

上述字符串形式refs官网不建议使用,它存在一些问题,比如效率问题等,在后续更新中可能废弃。

react还提供一种回调形式的refs,以上面实例为例,使用回调形式ref,代码如下所示:


0802_回调形式refs

回调形式ref格式:

ref={结点参数 => {this.xxx=结点参数}} // 把传递的参数结点挂载在组件实例上

2.2 回调refs调用次数问题

官网说明:

If the ref callback is defined as an inline function, it will get called twice during updates, first with null and then again with the DOM element. This is because a new instance of the function is created with each render, so React needs to clear the old ref and set up the new one. You can avoid this by defining the ref callback as a bound method on the class, but note that it shouldn’t matter in most cases.

如果回调函数以内联函数定义,在更新的时候会被调用2次,第一次传递的结点为null,第二次才传递DOM元素。因为每次render都会创建新的函数实例,react需要清理旧的ref,设置新的ref。如果要使用回调形式ref,需要把ref回调定义在组件实例上。

示例代码如下:


0803_回调refs执行次数问题

3 API形式refs

AP I格式上目前React官方推荐的方式,通用格式:

Class xxx extends React.Component{xxx = React.createRef()return {<标签 ref={this.xxx} />}
}

还是以最开始实例为例,代码如下:


0801_字符串形式refs

说明:

  • APi创建的ref一一对应,即一个结点对应一个ref;如果多个元素使用相同的ref,最后一个覆盖前面的。

4 几种ref形式对比

  • 字符串形式ref,定义使用形式简单,方便;但是官网不建议使用,虽然使用大多数情况下并不会有什么影响。
  • 回调形式ref,定义和使用相对麻烦。
  • API方式ref,每个元素都需要新创建一个ref,官网建议方式。

后记

❓QQ:806797785

⭐️源代码仓库地址:https://gitee.com/gaogzhen/react-study

参考:

[1]尚硅谷React教程(2022加更,B站超火react教程)[CP/OL].2020-12-15.p27-p31.

相关内容

热门资讯

股市必读:紫光股份(00093... 截至2025年7月25日收盘,紫光股份(000938)报收于25.04元,上涨0.64%,换手率1....
15%!美国与欧盟达成贸易协议... 据央视新闻报道,当地时间7月27日,美国总统特朗普表示,美国已与欧盟达成贸易协议,对欧盟输美商品征收...
早新闻|央行4000亿元MLF... 宏观热点 央行、农业农村部印发《关于加强金融服务农村改革 推进乡村全面振兴的意见》 近日,中国人...
21专访|细胞存储,《繁花》爷... 21世纪经济报道记者 赵云帆 上海报道 “我是一个真正意义上的创业者”,年过古稀的瞿建国,在采访中如...
华熙生物赵燕谈胶原蛋白乱象:科... 21世纪经济报道记者雷晨 北京报道 近年来,重组胶原蛋白成为医美和护肤领域的热门概念,市场宣传中不乏...
富春染织完成董事会选举换届 开... 7月25日晚间,富春染织公告显示,当日,公司2025年第一次临时股东会和富春染织第四届第一次董事会在...
圣湘生物:两款产品取得医疗器械... 每经AI快讯,圣湘生物(SH 688289,收盘价:22.94元)7月27日晚间发布公告称,圣湘生物...
10年期国债收益率升至1.73... 近期债券市场出现显著调整,多重因素交织推动收益率持续上行。权益市场强势表现与大宗商品价格上涨形成合力...
当对手都在做下沉 蜜雪冰城旗下... [ 今年5月,蜜雪集团跟巴西签署40亿元人民币的采购意向大单,其中大多数是咖啡豆。 ] 当星巴克、瑞...
新手必看!股指期货交易规则基础... 股指期货交易规则,看似复杂抽象,实则与我们的日常生活有着奇妙的共通之处。它就像一场精心编排的生活交响...
王登发履新茅台技开公司“一把手... 一则微信公众号发布的信息,披露了茅台集团旗下的技术开发公司“一把手”已换人。 近日,南都湾财社-酒水...
特斯拉机器人V3量产版亮相!马... 快科技7月27日消息,特斯拉的Optimus人形机器人V3量产版终于要来了!马斯克在最近的财报电话会...
原创 中... 在金融全球化的浪潮中,中国资本市场始终勇立潮头,不断探索前行。7月26日,中国资本市场学会成立大会暨...
报告:我国经济增长保持韧性 下... 央广网北京7月27日消息(记者 樊瑞)近日,中国金融四十人论坛(CF40论坛)发布《2025年第二季...
超6300亿元!A股银行“分红... 7月25日,成都银行完成权益分派股权登记,将于7月28日发放现金红利,这标志着A股上市银行2024年...
老铺黄金:2025年上半年单个... 7月27日晚,老铺黄金(HK06181)披露2025年中期业绩预告。预计2025年上半年实现销售业绩...
保险行业2025年上半年回顾与... 今天分享的是:保险行业2025年上半年回顾与未来展望 报告共计:59页 2025年上半年保险行业回顾...
数币App上新!消费者、商户两... 数字人民币试点持续推进,相关数字钱包手机应用程序功能也在优化中。7月21日,北京商报记者注意到,日前...
A股热点迭出,个股连续涨停!资... 近段时间以来A股市场整体走势较为强劲,上周以来在雅江概念集体上行的推动下涨势更为明显,主要指数不同程...
原创 印... 令人惊讶的是,印度人开始反思自身制造业的发展状况。印度经济学家帕纳加利亚指出,印度原本有机会在20年...