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

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)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python | Leetcode Python题解之第415题字符串相加
  • Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对
  • Ubuntu LLaMA-Factory实战
  • 【鸿蒙】HarmonyOS NEXT星河入门到实战8-自定义组件-组件通信
  • 机器学习_神经网络_深度学习
  • [OpenGL]使用OpenGL绘制带纹理三角形
  • 【深度学习|可视化】如何以图形化的方式展示神经网络的结构、训练过程、模型的中间状态或模型决策的结果??
  • Compiler Explorer 开源项目-在线编译器网站
  • 9.3Otsu阈值分割
  • 使用Django 搭建自动化平台
  • 项目实战 (15)--- 代码区块重构及相关技术落地
  • (k8s)kubernetes 部署Promehteus学习之路
  • [Redis][List]详细讲解
  • Elasticsearch 应用实战:从基础到高级实践
  • Radware 报告 Web DDoS 攻击活动
  • Akka系列(七):Actor持久化之Akka persistence
  • VUE es6技巧写法(持续更新中~~~)
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 开源SQL-on-Hadoop系统一览
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 温故知新之javascript面向对象
  • MPAndroidChart 教程:Y轴 YAxis
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • $.each()与$(selector).each()
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Python) SOAP Web Service (HTTP POST)
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • .NET C# 配置 Options
  • .NET CLR基本术语
  • .net反编译工具
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • [20171113]修改表结构删除列相关问题4.txt
  • [C#]将opencvsharp的Mat对象转成onnxruntime的inputtensor的3种方法
  • [C++]AVL树怎么转
  • [codeforces]Levko and Permutation
  • [exgcd] Jzoj P1158 荒岛野人
  • [Godot] 3D拾取
  • [HDOJ4911]Inversion
  • [IE编程] IE中使网页元素进入编辑模式
  • [ios-必看] IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS
  • [ISITDTU 2019]EasyPHP
  • [luoguP3159] [CQOI2012]交换棋子(最小费用最大流)
  • [NAND Flash 6.2] NAND 初始化常用命令:复位 (Reset) 和 Read ID 和 Read UID 操作和代码实现
  • [Spring MVC 4] MyBatis 分页开发
  • [SystemVerilog]常见设计模式/实践
  • [UDS] --- RoutineCommunicationControl 0x31
  • [Vue3 + TS + Vite] 获取网页选中内容的字符串格式或HTML格式
  • [windows系统安装/重装系统][step-4][番外篇-2]N卡驱动重装 |解决:开机几小时后电脑卡顿 | 后台自动运行了上千个Rundll32进程问题
  • [WUSTCTF2020]颜值成绩查询1
  • [xboard]real6410-6.2 移植rootfs之buildroot
  • [笔试题] 笔试题面试题
  • [导入]常用Response对象的使用详解