React Hooks小记(三)_forwardRef
forwardRef
【写在前面】
1、ref 的作用是获取实例,但由于函数组件不存在实例,因此无法通过 ref 获取函数组件的实例引用,而
React.forwardRef就是用来解决这个问题的。 2、
React.forwardRef会创建一个 React 组件,这个组件能够将其接收到的 ref 属性转发到自己的组件树。
1. 无法直接使用 ref 引用函数式组件
在下面的例子中,父组件 Father 想通过 ref 引用子组件 Child,此时代码会报错,因为函数式组件没有实例对象,无法被直接引用:
// 父组件
export const Father: React.FC = () => {const childRef = useRef()return (<><h1>Father 父组件</h1><hr /><!-- 下面这行代码中的 ref 使用不正确,因为 Child 组件是函数式组件,无法被直接引用 --><Child ref={childRef} /></>)
}
Child 组件的定义如下:
// 子组件(实现点击按钮,数值加减的操作)
const Child: React.FC = () => {const [count, setCount] = useState(0)const add = (step: number) => {setCount((prev) => (prev += step))}return (<><h3>Child 子组件 {count}</h3><button onClick={() => add(-1)}>-1</button><button onClick={() => add(1)}>+1</button></>)
}
注意:上面的代码无法正常运行,会在终端提示如下的 Warning 警告:
Warning:
Function components cannot be given refs. Attempts to access this ref will fail.
Did you mean to use React.forwardRef()?
错误提示中有解决此问题的关键提示:Did you mean to use React.forwardRef()?
2. forwardRef 的基本使用
在使用函数组件时,我们无法直接使用 ref 引用函数式组件,下面的代码会产生报错:
const childRef = useRef(null)
return <Child ref={inputRef} />
因为默认情况下,你自己的组件不会暴露它们内部 DOM 节点的 ref。
正确的方法是使用 React.forwardRef() 把函数式组件包装起来
例如 Child 子组件的代码如下:
// 被包装的函数式组件,第一个参数是 props,第二个参数是转发过来的 ref
const Child = React.forwardRef((props, ref) => {// 省略子组件内部的具体实现
})
然后,在父组件 Father 中,就可以给子组件 Child 绑定 ref 了:
// 父组件
export const Father: React.FC = () => {const childRef = useRef()// 按钮的点击事件处理函数const onShowRef = () => {console.log(childRef.current)}return (<><h1>Father 父组件</h1>{/* 点击按钮,打印 ref 的值 */}<button onClick={onShowRef}>show Ref</button><hr /><Child ref={childRef} /></>)
}
注意:此时父组件 Father 中获取到的 ref.current 是
undefined,因为子组件 Child 没有向外暴露任何自己内部的东西。
相关文章:
React Hooks小记(三)_forwardRef
forwardRef 【写在前面】 1、ref 的作用是获取实例,但由于函数组件不存在实例,因此无法通过 ref 获取函数组件的实例引用,而 React.forwardRef 就是用来解决这个问题的。 2、React.forwardRef 会创建一个 React 组件,这个组…...
面试复习记录
六级终于结束了,之前背的八股几乎也忘得差不多了,今天开始继续准备秋招,以下是每天的安排,会按时更新,就当是一种对自己的督促,也欢迎小伙伴们一起来互相监督。 2024.6.16 力扣:sql基础题库50…...
块级元素与行内元素详解
在网页设计与开发中,元素根据其在页面布局中的表现可分为两大类:块级元素(Block-level Elements)和行内元素(Inline Elements)。理解它们的特性和使用规则对于构建结构清晰、布局合理的网页至关重要。 块级…...
Kotlin编程实践-【Java如何调用Kotlin中带默认值参数的函数】
问题 如果你有一个带有默认参数值的 Kotlin 函数,如何从 Java 调用它而无须为每个参数显式指定值? 方案 为函数添加注解JvmOverloads。 也就是为Java添加重载方法,这样Java调用Kotlin的方法时就不用传递全部的参数了。 示例 在 Kotlin …...
中国城市统计年鉴(1985-2023年)
数据年限:1985-2023 数据格式:pdf、excel 数据内容:共分四个部分 第一部分是全国城市行政区划,列有不同区域、不同级别的城市分布情况; 第二、三部分分别是地级以上城市统计资料和县级城市统计资料,具体包括…...
RestTemplate远程请求的艺术
1 简说 编程是一门艺术,追求优雅的代码就像追求优美的音乐。 很多有多年工作经验的开发者,在使用RestTemplate之前常常使用HttpClient,然而接触了RestTemplate之后,却愿意放弃多年相处的“老朋友”,转向RestTemplate。那么一定是RestTemplate有它的魅力,有它的艺术风范。…...
Spring 整合 MyBatis 底层源码解析
大家好,我是柳岸花开。今天我们要讲的是 Spring 整合 MyBatis 的底层源码解析。希望大家能更深入理解 Spring 和 MyBatis 的整合原理,并应用到实际项目中。 由很多框架都需要和Spring进行整合,而整合的核心思想就是把其他框架所产生的对象放到…...
LeetCode 189.轮转数组
1.这个题我用的方法比较巧妙,大家如果觉得好的话,就给个免费的赞吧^ _ ^,谢谢了。 void reverse(int* nums,int left,int right) {while(left < right){int a nums[left];nums[left] nums[right];nums[right] a;left;right--;} } void rotate(int…...
JDK17 你的下一个白月光
JDK版本升级的非常快,现在已经到JDK20了。JDK版本虽多,但应用最广泛的还得是JDK8,正所谓“他发任他发,我用Java8”。 但实际情况却不是这样,越来越多的java工程师拥抱 JDK17,于是了解了一下 JDK17新语法&a…...
springboot优雅shutdown时如何保障异步线程的安全
我前面写了一篇springboot优雅shutdown的文章,看起来一切很美好。 https://blog.csdn.net/chenshm/article/details/139640775 那是因为没有进行多线程测试。如果一个请求中包括阻塞线程(主线程)和非阻塞线程(异步线程)…...
C++格式化库fmt使用方法
1. 格式化库fmt简介 fmt github地址 api说明 格式化参数说明 内容的格式化,体现在代码中主要表现为字符串、基本类型、自定义类型的拼接。例如说打印日志、拼接变量等。C中我们会经常使用类似printf,snprintf(C风格使用不方便),std::string.append(繁琐), std::io…...
HTML 颜色名:网页设计的调色板
HTML 颜色名:网页设计的调色板 在网页设计和开发中,颜色是一个关键元素,它不仅影响视觉效果,还能传达情感和品牌信息。HTML 颜色名是用于在 HTML 和 CSS 代码中指定颜色的预定义名称。这些颜色名易于记忆,方便设计师和开发者快速选择和应用颜色。本文将详细介绍 HTML 颜色…...
12306 火车票价格解析 (PHP 解析)
1. 从接口拿数据 日期 出发站 终点站 都填上 xxx/otn/leftTicketPrice/queryAllPublicPrice?leftTicketDTO.train_date2024-06-15&leftTicketDTO.from_stationBJP&leftTicketDTO.to_stationSJP&purpose_codesADULT 返回的数据是这样的 {"validateMess…...
了解统计学中不同类型的分布
目录 一、说明 二、均匀分布: 三、机器学习和数据科学中的均匀分布示例: 3.1 对数正态分布: 3.2 机器学习和数据科学中的对数正态分布示例: 四、 帕累托分布 4.1 什么是幂律? 4.2 机器学习和数据科学中的帕累托分布示例…...
k8s-CCE创建工作负载变量引用
CCE创建工作负载变量引用 背景,看到cce创建负载时会生成变量,如下。在skywaking-agent的使用,想要调用cce负载变量生成service_name。 -Dskywalking.agent.authentication里含有敏感信息需要写到配置项。简单粗糙的都写到配置项好像不合适。…...
后端主流框架--Spring02
前言:上篇关于Spring的文章介绍了一些Spring的基本知识,此篇文章主要分享一下如何配置Spring环境,如何注入等。 Spring项目构建 导入Spring相关JAR包 <dependency><groupId>org.springframework</groupId><artifactId>spring…...
[数据集][目标检测]减速带检测数据集VOC+YOLO格式5400张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5400 标注数量(xml文件个数):5400 标注数量(txt文件个数):5400 标注…...
分析Linux操作指令及使用场景与频率分析 持续更新
本篇主要针对在日常工作与学习中使用较多的linux指令的使用方法以及使用频次进行分析与讲解,旨在能够更好的掌握这些必备的技能。 linux指令非常的多,如果要记住所有的指令使用方法是非常困难的且要花费很长的时间,很多人习惯离开使用去通篇…...
Redis 字符串(String)
Redis 字符串(String) 介绍 Redis是一种开源的、高性能的键值数据库,它支持多种类型的数据结构,其中字符串(String)是Redis中最基本的数据类型之一。字符串类型可以存储任何形式的字符串,包括文本、序列化的对象或二进制数据。在Redis中,字符串类型的最大容量为512MB。 …...
第一篇:容器化的未来:从Docker的革命到云原生架构
容器化的未来:从Docker的革命到云原生架构 1. 引言 在当今快速演进的技术领域,容器化技术已经成为云计算和微服务架构的重要组成部分。该技术以其高效的资源利用率、快速的部署能力和卓越的隔离性能,彻底改变了软件开发和部署的方式。容器化…...
2026论文写作工具红黑榜:AI论文工具怎么选?用数据说话!
2026年论文写作工具红黑榜出炉,千笔AI、ThouPen、豆包位列红榜,适配国内学术规范,助力高效科研。黑榜需避开低质免费工具、无真实引用平台及过度依赖全文生成的工具。选择时建议按需求匹配度 - 数据可信度 - 成本承受力三维模型进行评估。 一…...
清华大学学位论文LaTeX模板:thuthesis完整使用指南
清华大学学位论文LaTeX模板:thuthesis完整使用指南 【免费下载链接】thuthesis LaTeX Thesis Template for Tsinghua University 项目地址: https://gitcode.com/gh_mirrors/th/thuthesis 清华大学thuthesis LaTeX模板是专为清华学子设计的学位论文写作工具&…...
CentOS 8下openLDAP服务器搭建避坑指南:从第三方仓库到phpLDAPadmin配置
CentOS 8企业级openLDAP部署实战:从仓库选择到安全加固全解析 在当今企业IT架构中,目录服务作为身份认证和资源管理的核心组件,其重要性不言而喻。而openLDAP作为开源目录服务的标杆解决方案,凭借其轻量高效、跨平台兼容的特性&am…...
【2026年最新600套毕设项目分享】springboot基于深度学习的蘑菇种类识别系统(14260)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...
EVA-02在社交媒体分析中的应用:舆情摘要与情感倾向判断
EVA-02在社交媒体分析中的应用:舆情摘要与情感倾向判断 最近跟一个做品牌营销的朋友聊天,他正为每天要处理海量的社交媒体评论发愁。团队几个人盯着屏幕,手动翻看、记录、总结,不仅效率低,还容易漏掉关键信息。他问我…...
如何快速美化Windows任务栏:TranslucentTB完全指南
如何快速美化Windows任务栏:TranslucentTB完全指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否厌倦了Windows系统一…...
实战案例:用Fish Speech 1.5为视频添加多语言配音
实战案例:用Fish Speech 1.5为视频添加多语言配音 1. 引言:视频配音的新选择 在视频制作过程中,配音往往是耗时耗力的环节。传统配音需要专业录音棚、配音演员和后期处理,成本高且周期长。Fish Speech 1.5的出现为视频创作者提供…...
中考真题资源合集
2024版《万唯中考真题分类》合集 文件大小: 2.2GB内容特色: 2024版万唯中考真题按考点分类,全科覆盖适用人群: 初三学生、教师、家长陪读备考核心价值: 刷透真题,精准查漏补缺,冲刺高分下载链接: https://pan.quark.cn/s/73347caeee74 2026…...
SEO_详解SEO优化的基本原理与核心步骤
SEO优化的基本原理 SEO(Search Engine Optimization,搜索引擎优化)是一门旨在提高网站在搜索引擎结果页面(SERP)中自然排名的科学与艺术。其目的是通过优化网站内容和结构,使其更符合搜索引擎的算法要求&am…...
ChatTTS 语音合成中如何高效添加语气词:原理与实战指南
最近在做一个语音播报项目,用到了ChatTTS,发现生成的语音虽然清晰,但总感觉少了点“人味儿”。特别是那些“嗯”、“啊”、“哦”之类的语气词,插进去之后特别生硬,像机器人在念稿,用户体验大打折扣。这让我…...
