React组件如何暴露自身的方法

一、研究背景

最近遇到一个如何暴露React组件自身方法的问题。在某些时候,我们需要调用某个组件内部的方法以实现某个功能,因此我们需要了解如何暴露组件内部API的方法。

二、实践过程

本文主要介绍React组件暴露子组件API的方法,以下是实践过程:

ref

props

静态属性方法

React.forwardRef

useImperativeHandle 

等可以实现组件暴露自身API,部分API示例代码如下:

import React, {useImperativeHandle} from "react";
import ReactDOM from "react-dom/client";class App extends React.Component {constructor(props) {super(props);// 创建一个ref存储textInput的DOM元素this.forwardButtonRef = React.createRef();this.homeRef = React.createRef();// 控制台输出:{ current: null },展开:current: <div>....,因为引用值被后续的ref值覆盖而改变console.log("forwardButtonRef-", this.forwardButtonRef);}// ref回調函數childRefCallback = (el) => {console.log("App的childRefCallback-", el);this.childInputRef = el;};componentDidMount() {// 在此或者更晚的方法获取ref(组件挂载后)console.log("Child-",this.childInputRef,"forwardRef-button-",this.forwardButtonRef,"homeRef-",this.homeRef);// 调用子组件向外暴露的方法this.childInputRef.handleChildClick()this.forwardButtonRef.current.handleForwardRefClick()this.homeRef.current.handleHomeClick()}render() {return (<div><h1>组件暴露自身API的方法</h1>{/* ref回调函数 */}<Child inputRef={this.childRefCallback}/>{/* 转发ref,在父组件获取子组件的ref */}<ForwardRefButton ref={this.forwardButtonRef}><span>ForwardRef</span></ForwardRefButton><Home ref={this.homeRef}/></div>);}
}// 使用forwardRef轉發ref
const ForwardRefButton = React.forwardRef((props, fdRef) => {const handleForwardRefClick = () => {console.log("ForwardRefButton的handleForwardRefClick方法");};// 向外暴露方法,讓父組件訪問子組件中的方法useImperativeHandle(fdRef, () => ({handleForwardRefClick,}));return (<button ref={fdRef} className="frButton">{props.children}</button>);
});function Child(props) {function handleChildClick() {console.log("Child的handleChildClick方法");}// 函数式组件向外暴露自身方法useImperativeHandle(props.inputRef, () => ({handleChildClick,}));return <input ref={props.inputRef}/>;
}class Home extends React.Component {// 类組件會自動向外暴露該組件的配置信息handleHomeClick = () => {console.log("Home的handleHomeClick方法");};render() {return <div onClick={this.handleHomeClick}>Home</div>;}
}const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<App/>);

下面是实践的效果,明显发现已经获取到组件内部的方法,如下图2-1所示。

图 2-1

三、参考文献

javascript - React 组件暴露自身 API 的方法 - 个人文章 - SegmentFault 思否

react+typescript 父组件主动获取子组件内暴露的方法或属性 - 天高任鸟飞吧 - 博客园 (cnblogs.com)

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于协同过滤推荐算法的食品推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目源码、Python精…

并查集LRU cache

并查集的定义 将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(unio…

尚品汇-秒杀成功下单接口、秒杀结束定时任务-清空缓存数据(五十四)

目录&#xff1a; &#xff08;1&#xff09;下单页面 &#xff08;2&#xff09;service-activity-client添加接口 &#xff08;3&#xff09;web-all 编写去下单控制器 &#xff08;4&#xff09;service-order模块提供秒杀下单接口 &#xff08;5&#xff09;service-or…

2024年最新 Python 大数据网络爬虫技术基础案例详细教程(更新中)

网络爬虫概述 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;又称为网页蜘蛛&#xff08;Web Spider&#xff09;或网络机器人&#xff08;Web Robot&#xff09;&#xff0c;是一种自动化程序或脚本&#xff0c;用于浏览万维网&#xff08;World Wide Web&#xf…

通过UV快速计算品牌独立站网络流量

背景&#xff1a; 品牌独立站项目交付过程中&#xff0c;我们需要为客户提供“云资源” 成本报价&#xff0c;其中“计算资源” 及CPU、内存、存储 参数相对固定&#xff0c;而互联网网络成本需要进行评估报价&#xff0c;以海外TOP云平台 AWS、AZURE、GCP 为例都是以“不限带…

【学术会议:中国厦门,为全球的计算机科学与管理科技研究者提供一个国际交流平台】第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)

您的学术研究值得被更多人看到&#xff01; 在这里&#xff0c;我为您提供精准的会议推荐&#xff0c;包括计算机科学、管理科技、信息系统、人工智能、供应链管理等领域的国际会议。高效的稿件录用流程和优质的检索服务将确保您的研究成果迅速传播。关注我&#xff0c;寻找与…

java(2)方法的使用

目录 1.前言 2.正文 2.1方法的定义 2.2方法的调用过程 2.3方法的实参与形参 2.3.1形参 2.3.2实参 2.3.3参数传递 2.4方法的重载 3.小结 1.前言 哈喽大家好啊&#xff0c;今天博主继续带领大家学习java的基本语法&#xff0c;java的基础语法部分打算用六到七篇博文完…

828华为云征文——使用Flexus云服务器X实例CentOS镜像下创建MySQL服务器教程

一、概述 1.1 前言 当前正值华为云盛大的828 B2B企业庆典&#xff0c;其中Flexus X实例的特惠活动尤为吸引人眼球。对于追求极致算力表现&#xff0c;并期望在自建MySQL数据库、Redis缓存系统及Nginx服务器部署上获得卓越性能的企业用户而言&#xff0c;这无疑是一个不可多得的…

[Linux] Linux进程PCB内部信息的深入理解

标题&#xff1a;[Linux] Linux进程PCB内部信息的深入理解 个人主页&#xff1a;水墨不写bug &#xff08;图片来自网络&#xff09; 目录 一.查看进程 二.认识并了解进程的关键信息 I&#xff0c;PID/PPID II&#xff0c;exe III&#xff0c;cwd 三、fork&#xff08;&…

设置文件夹用VSCODE右键打开,自己修改注册表不管用,该怎么办

设置文件夹用VSCODE右键打开&#xff0c;自己修改注册表不管用&#xff1b;试了好几次&#xff0c;自己修改注册表的方法不管用。所幸直接下个新版本&#xff0c;覆盖安装&#xff0c;把这两个选项勾上就可以了。

linux-基础知识4

网络连接性测试 ping ping可以用来测试本机与目标主机的连通速度网络稳定性 ping -c 5 -s 1024 目标主机ip地址 -c 表示ping包的个数,linux如果缺省-c会一直ping下去&#xff0c;windows平台的选项是-n -s指定ping发送数据的字节数默认是84字节。windows的是-l 没有问题时会之…

2023国赛C题 蔬菜类商品的自动定价与补货决策(上)

2023国赛C题 蔬菜类商品的自动定价与补货决策&#xff08;上&#xff09; 符号说明&#xff1a; 问题1 问题1主要的代码和思路在上一篇文章“数学建模实战块速入门”中已经进行了较为详细的展示&#xff0c;在问题一种要求我们从蔬菜单品和品类两个维度去分析各自之间的关系。…

2024年中国研究生数学建模竞赛C题——解题思路

2024年中国研究生数学建模竞赛C题——解题思路 数据驱动下磁性元件的磁芯损耗建模——解决思路 二、问题描述 为解决磁性元件磁芯材料损耗精确计算问题&#xff0c;通过实测磁性元件在给定工况&#xff08;不同温度、频率、磁通密度&#xff09;下磁芯材料损耗的数据&#xf…

学习笔记——MMSR 自适应多模态融合的序列推荐

Adaptive Multi-Modalities Fusion in Sequential Recommendation Systems 前几天当我在阅读这篇论文的时候&#xff0c;在网上找到的相关资料很少&#xff0c;所以当时我读这篇论文的时候特别痛苦&#xff0c;精读了两天半.....所以现在我将自己学习笔记分享出来&#xff0c;…

服务器安全,你必须知道的六个知识点

服务器安全 如今没有什么是安全的。各种系统安全漏洞的数量呈爆炸式增长。令人担忧的主要原因之一是服务器安全性。 接下来&#xff0c;就如何提升服务器安全&#xff0c;写几点见解。 虽然很多企业在服务器的安全性方面做了足够多&#xff0c;但是&#xff0c;黑客仍然能够…

Python数据分析与可视化(Python绘图详解)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Qt圆角窗口

Qt圆角窗口 问题&#xff1a;自己重写了一个窗口&#xff0c;发现用qss设置圆角了&#xff0c;但是都不生效&#xff0c;不过子窗口圆角都生效了。 无边框移动窗口 bool eventFilter(QObject *watched, QEvent *evt) {static QPoint mousePoint;static bool mousePressed f…

群晖Docker如何修改配置文件(ContainerManager)

群晖Docker与其他linux操作系统的docker启动方式存在差异,默认的Docker配置文件位置也不一样。所以本章教程,主要介绍如何找到群晖Docker下的默认配置文件。 一、登录SSH 为了方便操作,需要开启SSH,并通过SSH链接到群晖NAS主机。登录之后,切换到root用户 sudo -i二、编辑配…

车载测试项目实操学习:CAN通信测试、UDS诊断测试、自动化测试、功能安全测试、CAN一致性测试、HIL测试:9-20

FOTA模块中OTA的知识点&#xff1a;1.测试过程中发现哪几类问题&#xff1f; 可能就是一个单键的ecu&#xff0c;比如升了一个门的ecu&#xff0c;他的升了之后就关不上&#xff0c;还有就是升级组合ecu的时候&#xff0c;c屏上不显示进度条。 2.在做ota测试的过程中&#xff…

企业文档管理系统哪个好?2024年热门的10款文档管理系统软件推荐

在信息化时代&#xff0c;企业每天都会生成海量的文档、数据和资料。 如何有效管理这些文档&#xff0c;确保信息安全、版本控制和协同办公顺畅&#xff0c;是每个企业都必须面对的挑战。 2024年&#xff0c;随着技术的不断进步&#xff0c;市场上涌现出了众多优秀的文档管理…