当前位置: 首页 > news >正文

【react+ts- forwardRef】

react+ts- forwardRef

  • 1. 学习资料
  • 2. 普通input透传
    • 2.1 TS版本
    • 2.2 JS版本
  • 3. TS-Antd-Form组价透传

引用传递(Ref forwading)是一种通过组件向子组件自动传递 引用ref 的技术。对于应用者的大多数组件来说没什么作用。但是对于有些重复使用的组件,可能有用。例如某些input组件,需要控制其focus,本来是可以使用ref来控制,但是因为该input已被包裹在组件中,这时就需要使用Ref forward来透过组件获得该input的引用。

作者:pipu
链接:https://www.jianshu.com/p/fac884647720/
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

1. 学习资料

JS-react forward ref高阶组件透传-1
JS-react forward ref高阶组件透传-2
TS-react forward ref高阶组件透传

2. 普通input透传

2.1 TS版本

Parent.tsx

import React, { useRef, useState } from 'react'
import Child from './Child';export default function Parent() {const inputRef = useRef<HTMLInputElement>(null);const [text,setText] = useState<string>('');return (<div><button onClick={()=>{inputRef.current?.focus();setText('');}}>父组件内按钮-点击input获取焦点并清空value</button><Child ref={inputRef} text={text} changeVal={(val:string)=>{setText(val);}}></Child></div>)
}

Child.tsx

import React, { ChangeEvent, forwardRef, MutableRefObject, useCallback, useRef } from 'react'interface Iprops {text:string;changeVal:Function
}const Child = forwardRef<HTMLInputElement,Iprops>((props,ref) => {
const localRef = useRef<HTMLInputElement | null>(null);const onChange = useCallback((e:ChangeEvent<HTMLInputElement>)=>{props.changeVal(e.target.value)
},[props]);return (<div><input type="text" value={props.text} ref={el=>{localRef.current = el;console.log(ref)if (typeof ref === 'function') {ref(el);} else if (ref) {(ref as MutableRefObject<HTMLInputElement>).current = el!;}}} onChange={onChange}/><button onClick={()=>{console.log(localRef.current)console.log(localRef.current?.value)console.log(props.text)}}>子组件内按钮-点击获取input输入值</button></div>
)
}) export default Child

2.2 JS版本

Child.tsx

import React, { forwardRef, useCallback} from 'react'
const Child = forwardRef((props,ref) => {const onChange = useCallback((e)=>{props.changeVal(e.target.value)},[props]);return (<div><input type="text" value={props.text} ref={ref} onChange={onChange}/><button onClick={()=>{console.log(ref.current)console.log(ref.current.value)console.log(props.text)}}>子组件内按钮-点击获取input输入值</button></div>)
}) export default Child

3. TS-Antd-Form组价透传

Parent.tsx

import React, { useRef } from 'react'
import type { FormInstance } from 'antd/es/form';
import Child from './Child';export default function Parent() {const addForm = useRef<FormInstance>(null);const updateForm= useRef<FormInstance>(null);return (<div><button onClick={()=>{addForm.current?.validateFields().then((values) => {console.log(values);}).catch((err) => {console.log(err);});}}>父组件内按钮-点击input获取焦点并清空value</button><UserForm ref={addForm} regionList={regionList} roleList={roleList} /><UserForm ref={updateForm} regionList={regionList} roleList={roleList} /></div>)
}

Child.tsx

import React, { forwardRef, MutableRefObject, Ref, useEffect} from "react";
import { Form } from "antd";
import type { FormInstance } from 'antd/es/form';interface UserFormProps {isUpdateRegionDisabled?:boolean;regionList:any[];roleList:any[];
}
const assignRefs = <T extends unknown>(...refs: Ref<T | null>[]) => {return (node: T | null) => {refs.forEach((r) => {if (typeof r === "function") {r(node);} else if (r) {(r as MutableRefObject<T | null>).current = node;}});};
};const UserForm = forwardRef<FormInstance,UserFormProps>((props,ref)=>{const localRef = React.useRef<FormInstance | null>(null);useEffect(() => {console.log('localRef',localRef.current)}, [props]);return (<Form layout="vertical" ref={assignRefs(localRef, ref)}></Form>)
})

相关文章:

【react+ts- forwardRef】

reactts- forwardRef1. 学习资料2. 普通input透传2.1 TS版本2.2 JS版本3. TS-Antd-Form组价透传引用传递&#xff08;Ref forwading&#xff09;是一种通过组件向子组件自动传递 引用ref 的技术。对于应用者的大多数组件来说没什么作用。但是对于有些重复使用的组件&#xff0c…...

计算机网络-- 网络层(day06)

文章目录网络层思维导图IPv4地址的应用规划定长的子网掩码变长的子网掩码VLSMIP数据报的发送和转发过程主机发送IP数据报路由器转发IP数据报静态路由选择动态路由选择路由选择协议概述常见的路由选择协议路由器的基本结构路由信息协议RIP的基本工作原理开放最短路径优先OSPF的基…...

docker 镜像

一、介绍 镜像:是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码,运行时需要的库,环境变量和配置文件等)这个打包好的运行环境就是image镜像文件。 只有通过这个镜…...

JUC并发编程与源码分析笔记11-Java对象内存布局和对象头

先从阿里及其它大厂面试题说起 你觉得目前面试&#xff0c;你还有那些方面理解的比较好&#xff0c;我没问到的&#xff0c;我说了juc和jvm以及同步锁机制那先说juc吧&#xff0c;说下aqs的大致流程cas自旋锁&#xff0c;是获取不到锁就一直自旋吗?cas和synchronized区别在哪…...

JavaSE之集合篇

文章目录前言一、集合概述集合继承结构图二、Collection接口中常用方法2.1Collection中存放什么元素&#xff1f;2.2常用方法2.3迭代器三、List接口中常用的方法四、ArrayList初始化容量及扩容五、Vector六、Map接口常用方法七、Properties前言 由于在刷题过程中&#xff0c;经…...

LeetCode分类刷题-----贪心算法

贪心算法贪心455.分发饼干376.摆动序列53.最大子序和122.买卖股票的最佳时机||55.跳跃游戏45.跳跃游戏||1005.K次取反后最大化的数组和134.加油站135.分发糖果860.柠檬水找零406.根据身高重建队列452.用最少数量的箭引爆气球![在这里插入图片描述](https://img-blog.csdnimg.cn…...

SiteWhere开源物联网平台支持意大利都灵智能计量

这篇简短的文章描述了一个基于 SiteWhere 开源物联网平台的智慧城市用例。 SiteWhere总部位于佐治亚州亚特兰大&#xff0c;是一个开源物联网应用程序支持平台 (AEP)&#xff0c;提供两种解决方案。首先&#xff0c;SiteWhere 的社区版 (CE) 是在 CPAL 许可下提供的。对于此解…...

【unity】rts engine 6 放置并建造建筑;

一 放置并建造建筑 GameManager -> Essential -> BuildingExtension 查看 building placement building position y offset Y轴偏移&#xff0c;建筑离地距离&#xff0c;可0.1 terrain max distance 放置建筑与允许地形的最大距离&#xff0c;可1 placable terrain …...

华为OD机试题 - 任务调度(JavaScript)| 含思路

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解: 任务调度题目输入输出描述示例一输入输出Code解题思路华为OD其…...

《Spring源码深度分析》第4章 自定义标签的解析

目录标题前言一、自定义标签使用二、自定义标签解析1、代码入口2、parseCustomElement【BeanDefinitionParserDelegate】2.1 resolve【DefaultNamespaceHandlerResolver】3、parse【NamespaceHandlerSupport】4、parse【AbstractBeanDefinitionParser】4.1 parseInternal【Abst…...

MATLAB绘制椭圆形相关系矩阵图

数据/代码准备 数据及代码下载&#xff1a; 下载专区-《MATLAB统计分析与应用&#xff1a;40个案例分析》程序与数据 绘图函数&#xff1a; matrixplot(data, PARAM1,val1, PARAM2,val2, ...) 案例 数据如下&#xff1a; MATLAB代码如下&#xff1a; clc close all clear …...

「SQL面试题库」 No_1 员工薪水中位数

&#x1f345; 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起&#xff0c;全员免费参与的SQL学习活动。我每天发布1道SQL面试真题&#xff0c;从简单到困难&#xff0c;涵盖所有SQL知识点&#xff0c;我敢保证只要做完这100道题&#xff0c;不仅能轻松搞定面试&#xff…...

Python机器学习17——极限学习机(ELM)

本系列基本不讲数学原理&#xff0c;只从代码角度去让读者们利用最简洁的Python代码实现机器学习方法。 背景&#xff1a; 极限学习机(ELM)也是学术界常用的一种机器学习算法&#xff0c;严格来说它应该属于神经网络&#xff0c;应该属于深度学习栏目&#xff0c;但是我这里把它…...

二分查找与判定树

二分查找的算法思想二分查找也称“折半查找”&#xff0c;要求查找表为采用顺序存储结构的有序表。本例一律采用升序排列。二分查找每一次都会比较给定值与序列[low,high]的中间元素&#xff0c;该元素的下标为mid (lowhigh)/2,若两者相等&#xff0c;则返回元素的下标为mid;如…...

反转链表(精美图示详解哦)

全文目录引言反转链表题目描述与思路实现总结引言 在学习了单链表的相关知识后&#xff0c;尝试实现一些题目可以帮助我们更好的理解单链表的结构以及对其的使用。 从这篇文章开始&#xff0c;将会介绍一些编程题来帮助我们更好的掌握单链表&#xff1a; 分别是反转链表、链表…...

深入理解多线程

一、线程基本概念 1、概述 线程是允许应用程序并发的一种机制。线程共享进程内的所有资源。 线程是调度的基本单位。 每个线程都有自己的 errno。 所有 pthread 函数均以返回 0 表示成功&#xff0c;返回一个正值表示失败。 编译 pthread 程序需要添加链接库&#xff08;…...

华为OD机试题 - 英文输入法(JavaScript)

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解: 英文输入法题目输入输出示例一输入输出说明示例一输入输出Code…...

64 云原生容器化

文章目录 一、什么是rancher二、为什么使用rancher三、 Rancher与[k8s](https://so.csdn.net/so/search?q=k8s&spm=1001.2101.3001.7020)的关系及区别1、Rancher具有的优势三、rancher安装1、细部介绍四、图形化操作1、执行2、图形化操作1、进行客户机登录rancher2、Ranch…...

IronXL for .NET 2023.2.5 Crack

关于适用于 .NET 的 IronXL 在 C# 中阅读和编辑 Excel 电子表格&#xff0c;无需 MS Office 或 Excel Interop。 IronXL for .NET 允许开发人员在 .NET 应用程序和网站中读取、生成和编辑 Excel&#xff08;和其他电子表格文件&#xff09;。您可以读取和编辑 XLS/XLSX/CSV/TS…...

计算机组成原理|第一章(笔记)

目录第一章 计算机系统概论1.1 计算机系统简介1.1.1 计算机的软硬件概念1.1.2 计算机系统的层次结构1.1.3 计算机组成和计算机体系结构1.2 计算机的基本组成1.2.1 冯 诺伊曼计算机的特点1.2.2 计算机的硬件框图1.2.3 计算机的工作过程1.3 计算机硬件的主要技术指标1.3.1 机器字…...

YOLOv10镜像新手入门:3步完成首次预测,体验实时检测魅力

YOLOv10镜像新手入门&#xff1a;3步完成首次预测&#xff0c;体验实时检测魅力 1. 为什么选择YOLOv10镜像 对于刚接触目标检测的新手来说&#xff0c;YOLOv10官版镜像是最佳起点。这个预构建的镜像已经帮你解决了最头疼的环境配置问题&#xff0c;让你能直接体验最先进的实时…...

BGE Reranker-v2-m3实战教程:与Milvus/Pinecone向量库联动,构建混合检索Pipeline

BGE Reranker-v2-m3实战教程&#xff1a;与Milvus/Pinecone向量库联动&#xff0c;构建混合检索Pipeline 1. 项目概述与核心价值 BGE Reranker-v2-m3是一个基于FlagEmbedding库和BAAI/bge-reranker-v2-m3模型开发的本地文本相关性重排序工具。这个工具专门处理「查询语句-候选…...

SiameseUIE中文-base教程:DEPLOYMENT.md文档解读与自定义扩展路径

SiameseUIE中文-base教程&#xff1a;DEPLOYMENT.md文档解读与自定义扩展路径 你是不是也遇到过这样的烦恼&#xff1f;面对一篇新闻稿&#xff0c;想快速找出里面的人名、地名和公司名&#xff0c;手动标注得眼花缭乱&#xff1b;或者分析一堆用户评论&#xff0c;想搞清楚大…...

OpenClaw数据标注:Qwen2.5-VL-7B辅助生成图像标签训练集

OpenClaw数据标注&#xff1a;Qwen2.5-VL-7B辅助生成图像标签训练集 1. 为什么需要AI辅助数据标注 作为一名独立开发者&#xff0c;我最近在尝试构建一个简单的图像分类模型时遇到了数据标注的瓶颈。手动标注1000张图片花费了我整整三天时间&#xff0c;而且过程中频繁出现标…...

OpenClaw+Qwen3-4B成本对比:自建模型vs商业API实测

OpenClawQwen3-4B成本对比&#xff1a;自建模型vs商业API实测 1. 为什么需要做这个对比 去年夏天&#xff0c;当我第一次用OpenClaw自动化处理周报时&#xff0c;发现一个惊人的现象&#xff1a;仅仅生成三份周报就消耗了价值5美元的API额度。这让我开始思考——对于个人开发…...

Go项目实战:手把手教你用GORM封装一个支持6种数据库(含4种国产库)的通用连接池

Go项目实战&#xff1a;构建支持6种数据库的GORM通用连接池 当企业级应用需要同时对接多种数据库时&#xff0c;开发团队往往面临巨大挑战。特别是当项目涉及国产数据库时&#xff0c;官方驱动支持不足、文档匮乏等问题会让开发周期大幅延长。本文将分享如何基于GORM构建一个支…...

seo站长论坛讨论哪些SEO热点话题_seo站长论坛如何运营自己的网站

SEO站长论坛讨论哪些SEO热点话题 在当前数字化竞争激烈的市场环境中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为每个网站运营者必不可少的技能。SEO站长论坛作为交流与分享的重要平台&#xff0c;各类热点话题层出不穷。在SEO站长论坛上&#xff0c;哪些话题…...

OpenClaw故障排查大全:Phi-3-vision-128k-instruct接口连接异常解决方案

OpenClaw故障排查大全&#xff1a;Phi-3-vision-128k-instruct接口连接异常解决方案 1. 问题背景与典型场景 上周我在尝试将OpenClaw接入本地部署的Phi-3-vision-128k-instruct模型时&#xff0c;遭遇了持续两天的连接异常问题。这个多模态模型通过vllm部署后&#xff0c;本应…...

MetaQTL元分析实战:从文献整理到结果可视化的保姆级流程(附避坑指南)

MetaQTL元分析实战&#xff1a;从文献整理到结果可视化的保姆级流程&#xff08;附避坑指南&#xff09; 基因组学研究正迎来数据爆炸的时代&#xff0c;单个QTL研究往往受限于样本量和实验设计&#xff0c;而MetaQTL分析通过整合多源数据&#xff0c;能显著提高QTL检测的统计效…...

JavaScript中类方法中this指向丢失的场景与对策

JavaScript类中方法的this丢失本质是函数单独调用时上下文丢失&#xff1b;常见于回调传递、解构赋值、异步操作三类场景&#xff0c;可通过箭头函数、bind绑定、类字段语法等方案解决。在 JavaScript 类中&#xff0c;方法里的 this 指向丢失&#xff0c;本质是函数被“单独调…...