react api:forwardRef

forwardRef 允许组件使用 ref 将 DOM 节点暴露给父组件。

**
import { forwardRef } from ‘react’;

const MyInput = forwardRef(function MyInput(props, ref) {
// …
});

使用 forwardRef() 让组件接收 ref 并将其传递给子组件:

forwardRef 返回一个可以在 JSX 中渲染的 React 组件。与作为纯函数定义的 React 组件不同,forwardRef 返回的组件还能够接收 ref 属性。

const MyInput = forwardRef(function MyInput(props, ref) {
return (

);
});

props:父组件传递过来的 props。

ref:父组件传递的 ref 属性。ref 可以是一个对象或函数。如果父组件没有传递一个 ref,那么它将会是 null。你应该将接收到的 ref 转发给另一个组件,或者将其传递给 useImperativeHandle。
**

将 DOM 节点暴露给父组件

**
默认情况下,每个组件的 DOM 节点都是私有的。然而,有时候将 DOM 节点公开给父组件是很有用的,比如允许对它进行聚焦。将组件定义包装在 forwardRef() 中便可以公开 DOM 节点:

import { forwardRef } from ‘react’;

const MyInput = forwardRef(function MyInput(props, ref) {
const { label, …otherProps } = props;
return (

);
});
你将在 props 之后收到一个 ref 作为第二个参数。将其传递到要公开的 DOM 节点中:
import { forwardRef } from ‘react’;
const MyInput = forwardRef(function MyInput(props, ref) { const { label, …otherProps } = props; return ( );});
这样,父级的 Form 组件就能够访问 MyInput 暴露的 DOM 节点:
function Form() {
const ref = useRef(null);

function handleClick() {
ref.current.focus();
}

return (



编辑


);
}

**

在多个组件中转发 ref

**
除了将 ref 转发到 DOM 节点外,还可以将其转发到自定义组件,例如 MyInput 组件:
const FormField = forwardRef(function FormField(props, ref) {
// …
return (
<>


</>
);
});
如果 MyInput 组件将 ref 转发给它的 ,那么 FormField 的 ref 将会获得该 :
function Form() {
const ref = useRef(null);

function handleClick() {
ref.current.focus();
}

return (



Edit


);
}
**

暴露命令式句柄而非 DOM 节点

**
可以使用被称为 命令式句柄(imperative handle) 的自定义对象暴露一个更加受限制的方法集,而非整个 DOM 节点。为了实现这个目的需要定义一个单独的 ref 存储 DOM 节点:
const MyInput = forwardRef(function MyInput(props, ref) {
const inputRef = useRef(null);

// …

return <input {…props} ref={inputRef} />;
});
将收到的 ref 传递给 useImperativeHandle 并指定你想要暴露给 ref 的值:
import { forwardRef, useRef, useImperativeHandle } from ‘react’;

const MyInput = forwardRef(function MyInput(props, ref) {
const inputRef = useRef(null);

useImperativeHandle(ref, () => {
return {
focus() {
inputRef.current.focus();
},
scrollIntoView() {
inputRef.current.scrollIntoView();
},
};
}, []);

return <input {…props} ref={inputRef} />;
});
**

不要滥用 ref。只应在无法使用 props 表达的 命令式 行为中使用 ref:例如滚动到节点、将焦点放在节点上、触发动画,以及选择文本等等。

如果可以将某些东西使用 props 表达,那就不应该使用 ref。例如,不要从一个 Modal 组件中暴露像 { open, close } 一样的命令式句柄,更好的做法是将 isOpen 作为 prop,像这样 。Effect 可以帮助通过 props 暴露命令式行为。

我的组件使用了 forwardRef,但是它的 ref 总是为 null 。 这通常意味着你忘记实际使用你所接收到的 ref 了。

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

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

相关文章

Qt Creator 界面

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、认识 Qt Creator 界面 1、总览 2、左边栏 3、代码编辑区 4、UI设计界面 5、构建区 一、认识 …

摄影杂记一

摄影小白&#xff0c;最近买了一台微单&#xff0c;型号是佳能R10&#xff0c;加上18-150套机镜头和佳能RF 50 F1.8定焦镜头。开始学习摄影。 PS&#xff1a;摄影穷三代&#xff0c;单反毁一生。嘿嘿。 一、分镜头拍摄四步提升法 B站&#xff1a;六斤 拍视频三件事&#xff1…

成都龙渊网络 UE客户端开发(20min)

自我介绍 为什么想做游戏 C熟还是C#熟 C的虚函数是什么 虚函数解决了什么问题 为什么析构函数一定要是虚函数呢 stl了解吗 说一下map的底层实现 map底层的数据结构时间复杂度是多少 unordered_map的底层实现 unordered_map底层的数据结构时间复杂度是多少 哈希冲突有…

专注项目管理的Mac工具 - Project Office Pro 最新版

Project Office Pro for Mac是一款功能强大的项目管理软件&#xff0c;旨在帮助用户更好地管理和跟踪项目进展&#xff0c;提高工作效率和质量。以下是该软件的主要功能介绍&#xff1a; 项目创建与编辑&#xff1a;用户可以根据自己的需求自定义项目计划&#xff0c;包括设置…

每天五分钟计算机视觉:模型集成和数据扩充在基准测试中的应用

本文重点 在基准测试中,模型集成和数据扩充是两个关键的技巧,它们对于提升测试的性能和准确性具有显著的影响。以下是从模型集成和数据扩充两个技巧在基准测试中的应用进行的总结。 模型集成在基准测试中的应用 在确定神经网络架构之后,我们可以独立训练几个神经网络,并…

【51单片机入门记录】RTC(实时时钟)-DS1302概述

目录 一、基于三线通信的RTC-DS1302 &#xff08;1&#xff09;简介 &#xff08;2&#xff09;特性 &#xff08;3&#xff09;引脚介绍 &#xff08;4&#xff09;控制字的格式 &#xff08;5.0&#xff09;日历时钟寄存器介绍 &#xff08;5.1&#xff09;日历时钟寄存…

4.1.k8s的pod-创建,数据持久化,网络暴露,env环境变量

目录 一、Pod介绍 二、指令创建和管理Pod 三、资源清单创建pod 1.挂载hostPath存储卷 2.NFS存储卷 所有节点安装nfs k8s3编辑NFS配置文件 k8s1&#xff0c;k8s2节点开机挂载 编辑pod资源清单&#xff0c;挂载nfs 四、pod网络暴露 1.hostNetwork使用宿主机的网络 2.…

【单片机】74HC4052电路图,单片机端口复用电路

74HC4052电路图 如下图&#xff0c;还是很好理解&#xff0c;PA9、PA10是单片机引脚。 当A和B是00&#xff0c;那么就是X-COM和0X短路&#xff0c;Y-COM和0Y短路。 当A和B是01&#xff0c;那么就是X-COM和1X短路&#xff0c;Y-COM和1Y短路。 以此类推。 74HC 工艺可以直接3.…

【Android】图解View的工作流程原理

文章目录 入口DecorView如何加载到Window中MeasureSpec MeasureView的测量ViewGroup的测量 LayoutView的layout() Draw1、绘制背景3、绘制View内容4、绘制子View6、绘制装饰 入口 DecorView如何加载到Window中 MeasureSpec 该类是View的内部类&#xff0c;封装View的规格尺寸…

FlutterFlame游戏实践#08 | 打砖块 -关卡设计

theme: cyanosis 本文为稀土掘金技术社区首发签约文章&#xff0c;30天内禁止转载&#xff0c;30天后未获授权禁止转载&#xff0c;侵权必究&#xff01; Flutter\&Flame 游戏开发系列前言: 该系列是 [张风捷特烈] 的 Flame 游戏开发教程。Flutter 作为 全平台 的 原生级 渲…

CTF之矛盾

这一题就是php的弱比较“” 这里要求输入的不是数字&#xff0c;并且输入要为1才打印flag 那我们就输入一个1后面接随便什么字符&#xff0c;因为php的弱比较将字符与数字进行比较的时候&#xff0c;会把字符转换成数字再比较&#xff0c;当转换到字符时后面便都为空了 flag{…

单身狗---进阶版(撞色搭配)

#目录 一、问题 二、思路 三、代码 四、代码讲解 1.拆分 2.得到单身狗 3.返回 五、注意 一、问题 整数数组 sockets 记录了一个袜子礼盒的颜色分布情况&#xff0c;其中 sockets[i] 表示该袜子的颜色编号。礼盒中除了一款撞色搭配的袜子&#xff0c;每种颜色的袜子均有…

域名应该如何实名?域名应该如何备案?域名如何解析到服务器

大家好欢迎来到易极赞&#xff0c;今天我们来跟大家聊一下“域名应该如何实名以及备案”这个话题。 域名实名认证是验证域名所有者身份的过程&#xff0c;以确保域名的合法性&#xff0c;通常需要登录到域名服务商后台&#xff0c;进行域名的注册&#xff0c;注册后创建域名模…

WPF中嵌入3D模型通用结构

背景&#xff1a;wpf本身有提供3D的绘制&#xff0c;但是自己通过代码描绘出3D是比较困难的。3D库helix-toolkit支持调用第三方生成的模型&#xff0c;比如Blender这些&#xff0c;所以在wpf上使用3D就变得非常简单。这里是一个通过helix-toolkit库调用第三方生成的3d模型的样例…

linux 安装 pptp 协议

注意&#xff1a;目前iOS已不支持该协议 yum -y install ppp wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/pptpd-1.4.0-2.el7.x86_64.rpm yum -y install pptpd-1.4.0-2.el7.x86_64.rpm vi /etc/pptpd.conf 去除 localip 和 remoteip的注释 …

Python | Leetcode Python题解之第13题罗马数字转整数

题目&#xff1a; 题解&#xff1a; class Solution:SYMBOL_VALUES {I: 1,V: 5,X: 10,L: 50,C: 100,D: 500,M: 1000,}def romanToInt(self, s: str) -> int:ans 0n len(s)for i, ch in enumerate(s):value Solution.SYMBOL_VALUES[ch]if i < n - 1 and value < S…

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--wordpress中的著名循环

wordpress中的著名循环 首先&#xff0c;在深入研究任何代码之前&#xff0c;我们首先要确保我们有不止一篇博客文章可以工作。因此&#xff0c;我们要去自己的wordpress站点&#xff0c;从侧边栏单机Posts(文章)&#xff0c;进行创建 在执行代码的时候会优先执行single.php如…

【Web应用技术基础】JavaScript(2)——案例:切换按钮的文本

视频已发。截图如下&#xff1a; 很简单的&#xff0c;只需要实现一个按钮的点击方法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…

【六 (2)机器学习-EDA探索性数据分析模板】

目录 文章导航一、EDA&#xff1a;二、导入类库三、导入数据四、查看数据类型和缺失情况五、确认目标变量和ID六、查看目标变量分布情况七、特征变量按照数据类型分成定量变量和定性变量八、查看定量变量分布情况九、查看定量变量的离散程度十、查看定量变量与目标变量关系十一…

开源模型应用落地-qwen1.5-7b-chat-LoRA微调代码拆解

一、前言 本篇文章将解析 QWen1.5 系列模型的微调代码,帮助您理解其中的关键技术要点。通过阅读本文,您将能够更好地掌握这些关键技术,并应用于自己的项目中。 开源模型应用落地-qwen1.5-7b-chat-LoRA微调(二) 二、术语介绍 2.1. LoRA微调 LoRA (Low-Rank Adaptation) 用…