父组件调用子组件 ref 不生效?组件暴露 ref ?

向你的组件暴露 ref

要暴露 ref 最关键的就是 forwardRef

forwardRef 是 React 中的一个高阶函数,用于在函数组件中将 ref 属性向下传递给子组件。

在 React 中,我们可以使用 ref 属性来获取对一个组件实例的引用,以便在父组件中操作子组件。但是,当我们在一个函数组件中使用 ref 属性时,默认情况下,React 不会将该 ref 属性传递给函数组件内部的 DOM 元素或其他组件。

这就是 forwardRef 函数的作用。它接受一个回调函数作为参数,该回调函数接收两个参数:propsref。在回调函数中,我们可以将 ref 属性传递给子组件的特定元素或组件。

通过使用 forwardRef 函数,我们可以将父组件传递给函数组件的 ref 属性转发给子组件的 DOM 元素或其他组件。这样,我们就能够在父组件中通过使用函数组件的引用操作子组件。

案例:

自定义 React 组件暴露引用 (ref) , 将 inputRef 引用传递给了 MyInput 组件,并且在父组件中通过操作引用来控制子组件内部的行为。

image.png

// 向你的组件暴露 ref
import { forwardRef, useRef } from "react";// 我是子组件
// 暴露了 MyInput 函数
const MyInput = forwardRef((props, ref: any) => {return <input {...props} ref={ref} />;
});// 我是父组件
function ExposeRef() {// 获取到 MyInput 的 refconst inputRef = useRef<any>(null);function handleClick() {// 操作 MyInput 的 refinputRef.current.focus();}return (<><MyInput ref={inputRef} /><button onClick={handleClick}>获取焦点</button></>);
}
export default ExposeRef;

定义了一个函数组件 MyInput,通过使用 forwardRef 包裹组件,以便能够将父组件传递的 ref 属性传递给子组件。forwardRef 函数接受一个回调函数作为参数,该回调函数接收两个参数:propsref。在这个回调函数中,我们使用 input 元素来展示输入框,并使用展开操作符 ...props 将父组件传递给 MyInput 的其他属性应用到 input 元素上,同时将 ref 设置为传递进来的 ref

接着,我们定义了一个名为 ExposeRef 的函数组件。在这个组件内部,我们使用 useRef 创建了一个名为 inputRef 的引用。

在组件的返回值中,我们使用 MyInput 组件,并将 inputRef 作为 ref 属性传递给它。这样,inputRef 就可以在 MyInput 组件内部访问到 input 元素的引用。

同时,我们渲染了一个按钮,并在点击事件的处理函数中操作了 inputRef 的引用。在 handleClick 函数中,我们调用 inputRef.current.focus() 来聚焦到 input 元素上。这样,当用户点击按钮时,输入框会获取焦点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dynamic ReLU:根据输入动态确定的ReLU

这是我最近才看到的一篇论文&#xff0c;它提出了动态ReLU (Dynamic ReLU, DY-ReLU)&#xff0c;可以将全局上下文编码为超函数&#xff0c;并相应地调整分段线性激活函数。与传统的ReLU相比&#xff0c;DY-ReLU的额外计算成本可以忽略不计&#xff0c;但表示能力明显增强&…

项目(补充2):智慧教室

一。emWin环境的搭建 1.codeBlock下载 开源免费。 2.使用stm的Cubemx提供的作图软件 &#xff08;1&#xff09;在C盘下找到第三方的固件库&#xff0c;旁边有个ST文件夹 注意&#xff1a;我在下载cubemx为默认的路径 &#xff08;2&#xff09;STemWin中的Soft提供了绘图…

JavaScript:反转数组的四种方法

1.使用For循环反转数组&#xff1a; 我们将为这种方法使用递减循环&#xff0c;以迭代给定数组的每个元素。 数组的最后一个元素将是循环的起点(arr.length — 1) &#xff0c;它将一直运行直到到达数组的起点(i ≥ 0) var arr [1, 2, 3, 4, 5, 6, 7, 8, 9];function reverse…

一文1800字从0到1使用Python Flask实战构建Web应用

Python Flask是一个轻量级的Web框架&#xff0c;它简单易用、灵活性高&#xff0c;适用于构建各种规模的Web应用。本文将介绍如何使用Python Flask框架来实战构建一个简单的Web应用&#xff0c;并展示其基本功能和特性。 第一部分&#xff1a;搭建开发环境 在开始之前我们需要…

[CMake教程] 循环

目录 一、foreach()二、while()三、break() 与 continue() 作为一个编程语言&#xff0c;CMake也少不了循环流程控制&#xff0c;他提供两种循环foreach() 和 while()。 一、foreach() 基本语法&#xff1a; foreach(<loop_var> <items>)<commands> endfo…

企业架构LNMP学习笔记8

1、 运维人员需要考虑安全性、稳定性。 安装&#xff1a; 解压进入到目录&#xff1a; shell > tar zxf php-7.2.12.tar.gz shell > cd php-7.2.12 安装依赖软件&#xff1a; yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel op…

【100天精通Python】Day52:Python 数据分析_Numpy入门基础与数组操作

目录 1 NumPy 基础概述 1.1 NumPy的主要特点和功能 1.2 NumPy 安装和导入 2 Numpy 数组 2.1 创建NumPy数组 2.2 数组的形状和维度 2.3 数组的数据类型 2.4 访问和修改数组元素 3 数组操作 3.1 数组运算 3.2 数学函数 3.3 统计函数 4 数组形状操作 4.1 重塑数组形…

docker进阶作业

一、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 安装Docker&#xff1a;确保已在CentOS 7.5上安装了Docker。 拉取MySQL 5.6镜像&#xff1a;使用以下命令从Docker Hub上拉取MySQL 5.6镜像。 docker pull mysql:5.6 运行MySQL容器&#xff1a;使用以下命令…

使用Windbg动态调试排查软件启动不了的问题

目录 1、问题说明 2、初步分析 3、使用Windbg启动程序进行动态调试 4、进一步分析 5、何时使用Windbg静态分析&#xff1f;何时使用Windbg进行动态调试&#xff1f; 6、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&…

Go在安装Gin时出现Failed to connect 报错问题的解决方案(已解决)

在命令行中输入&#xff1a;go get -u github.com/gin-gonic/gin指令安装Gin第三方包时出现连接错误与连接超时的情况如下&#xff1a; 在较新版本的Go中引入了全新的包管理机制&#xff0c;出现上述错误可能是包管理机制设置不恰当的问题&#xff0c;尝试在终端窗口输入如下…

解决Apache Tomcat “Request header is too large“ 异常 ‍

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

python数分实战探索霍尔特法之销售预测python代码实现以及预测图绘制

探索霍尔特法:时间序列预测中的线性趋势捕捉 时间序列分析是统计学和数据分析中的一个核心领域。无论是预测股票市场的走势,还是预测未来的销售量,一个精确和可靠的预测模型都是至关重要的。在众多的时间序列预测方法中,霍尔特法(Holts method)脱颖而出,特别是当我们面…

【数据结构】| 并查集及其优化实现

目录 一. 并查集基本概念处理过程初始化合并查询小结 二. 求并优化2.1 按大小求并2.2 按秩(高度)求并2.3 路径压缩2.4 类的实现代码2.5 复杂度分析 三. 应用LeetCode 128: 最长连续数列LeetCode 547: 省份数量LeetCode 200: 岛屿数量 一. 并查集基本概念 以一个直观的问题来引入…

差分数组/前缀和

文章目录 1094. 拼车1109. 航班预定统计303. 区域和检索 - 数组不可变560. 和为K的子数组523. 连续的子数组的和 1094. 拼车 class Solution {public boolean carPooling(int[][] trips, int capacity) {int[] diff new int[1001]; // 记录每个站点改变的人数&#xff0c;比如…

无涯教程-JavaScript - WEIBULL函数

WEIBULL函数取代了Excel 2010中的WEIBULL.DIST函数。 描述 该函数返回威布尔分布。在可靠性分析中使用此分布,如计算设备的平均故障时间。 语法 WEIBULL(x,alpha,beta,cumulative)争论 Argument描述Required/OptionalXThe value at which to evaluate the function.Requir…

selenium可以编写自动化测试脚本吗?

Selenium可以用于编写自动化测试脚本&#xff0c;它提供了许多工具和API&#xff0c;可以与浏览器交互&#xff0c;模拟用户操作&#xff0c;检查网页的各个方面。下面是一些步骤&#xff0c;可以帮助你编写Selenium自动化测试脚本。 1、安装Selenium库和浏览器驱动程序 首先…

SQL Server对象类型(2)——索引(Index)(3)

说完了簇索引,接下来我们再说说非簇索引,与Oracle中的普通B-tree索引类似。SQL Server中的非簇索引,首先,其也是通过一个B-tree结构进行组织和存储,该结构同样分为根节点/数据页(Root Node/Page)、中间节点/数据页(Intermediate Nodes/Pages)和叶子节点/数据页(Leaf …

stable diffusion实践操作-常见lora模型介绍

系列文章目录 本文专门开一节写Lora相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 文章目录 系列文章目录前言一、什么是lora?1.1 lora 定义1.2 lora的基本原理1.2 通过分层控制lora 二、作用&#xff1a;2.1 复刻人物特征2…

C++实现蜂群涌现效果(flocking)

Flocking算法0704_元宇宙中的程序员的博客-CSDN博客 每个个体的位置&#xff0c;通过计算与周围个体的速度、角度、位置&#xff0c;去更新位置。

Linux系统编程5(线程概念详解)

线程同进程一样都是OS中非常重要的部分&#xff0c;线程的应用场景非常的广泛&#xff0c;试想我们使用的视频软件&#xff0c;在网络不是很好的情况下&#xff0c;通常会采取下载的方式&#xff0c;现在你很想立即观看&#xff0c;又想下载&#xff0c;于是你点击了下载并且在…