React通过ref获取子组件的数据和方法
一、函数式组件父组件1) ref必须传值, 否则childRef拿不到子组件的数据和方法注意: 不一定使用app组件, 其他的任何父组件都可以import ./App.css; import React, { useEffect, useRef } from react; import RefToGetChild from ./components/RefToGetChild; import _ from lodash; const App: React.FC () { const childRef useRefany(null); useEffect(() { console.log(_.get(childRef, current)); }, [_.get(childRef, current)]); return ( div RefToGetChild ref{childRef} message{子组件: say hello} / button onClick{() { const child _.get(childRef, current); const buttonDom child.buttonRef.current buttonDom?.click(); }}父组件: trigger child button/button button onClick{() { const child _.get(childRef, current); child?.onTest(); }}父组件: 使用子组件的onTest方法/button div父组件: 子组件的data {JSON.stringify(_.get(childRef, current.data))}/div /div ); }; export default App;子组件1) forwardRef作用: 封装组件, 直接将ref参数加在props后面(也可以不使用, 自己props定义一下ref需要传参, 父组件一样传ref就行)2) useImperativeHandle作用和vue3的defineExpose一样, 存储需要暴露给父组件让其获取的数据和函数import { forwardRef, useEffect, useImperativeHandle, useRef, useState, } from react; const RefToGetChild forwardRef((props:{message:string;}, ref) { const [data, setData] useState({}); const buttonRef useRef(null); useEffect(() { setTimeout(() { const obj { a: 1, b: 2, c: 3, d: Array.from({ length: 10 }, (_, i) ({ id: i })), }; setData(obj); }, 1000); }, []); const sayHello () { console.log(hello); }; const onTest () { console.log(test) } useImperativeHandle(ref, () ({ data, buttonRef, onTest, })); return ( div button ref{buttonRef} onClick{sayHello} {props.message} /button /div ); }); export default RefToGetChild二、class组件父组件 给子组件传onRef函数普通一个子组件获取子组件的方法很常见就不赘述了写一个获取列表的子组件内部方法或变量的示例import { PureComponent, Fragment } from react; class AttachmentList extends PureComponent { constructor(props) { super(props); this.state { arr: [{ id: 1 }], }; this.aiAuditRefMap React.createRef(); } render() { const { arr [], resetState } this.state; Fragment {arr.map(record { Child onRef{ref { try { if (!this.aiAuditRefMap.current) { this.aiAuditRefMap.current {}; } if (record.id) { this.aiAuditRefMap.current[record.id] ref; } } catch (err) { console.log(err, err); } }} {...resetState} /; })} /Fragment; } }子组件在componentDidMount、componentDidUpdate生命周期使用this.props.onRef(this)将子组件的instance传给组件关键代码componentDidMount() { const { onRef } this.props; if (onRef) { onRef(this); // 传递这个onRef函数父组件可以使用这个组件的方法 } } componentDidUpdate() { const { onRef } this.props; if (onRef) { onRef(this); // 传递这个onRef函数父组件可以使用这个组件的方法 } }

相关新闻

Postman集成ForgeJS实现RSA加密:自动化接口安全测试实战

Postman集成ForgeJS实现RSA加密:自动化接口安全测试实战

1. 项目概述:为什么要在Postman里折腾RSA?如果你经常和需要身份认证或数据加密的API打交道,尤其是那些金融、支付或涉及敏感数据的接口,那么“RSA非对称加密”这个词你一定不陌生。开发文档里经常会要求,在调用某个关键…

2026/7/28 11:09:10阅读更多 →
代码生成工具实践指南:从原理到生产环境集成

代码生成工具实践指南:从原理到生产环境集成

在实际开发过程中,我们经常需要将复杂的业务逻辑或算法封装成可复用的组件。Codex 作为一种代码生成和辅助工具,能够帮助开发者快速生成代码片段、完成函数实现甚至理解复杂代码逻辑。虽然原始材料没有提供具体的技术细节,但我们可以基于常见…

2026/7/28 11:09:10阅读更多 →
华为OD机考C卷贪吃蛇模拟题:Java实现与状态机设计详解

华为OD机考C卷贪吃蛇模拟题:Java实现与状态机设计详解

1. 项目概述与核心价值 最近在技术社区和求职圈里,“华为OD机考”的热度一直居高不下,尤其是其中的C卷真题,常常被看作是检验开发者综合编程能力的一块“试金石”。今天要拆解的这道“贪吃蛇”题目,就是一道典型的200分大题。它远…

2026/7/28 11:09:10阅读更多 →
双向 DC/AC 全桥 PCS 电路工作过程与正负功率回路拆解

双向 DC/AC 全桥 PCS 电路工作过程与正负功率回路拆解

1. 引言:什么是双向 DC/AC 全桥 PCS? 双向 DC/AC 全桥 PCS(Power Conversion System,功率变换系统) 是储能系统、微电网、电动汽车充电桩等场景中的核心功率变换单元。它能够在直流(DC)侧(如电池、光伏阵列)和交流(AC)侧(如电网、负载)之间实现能量的双向流动。 …

2026/7/29 2:18:17阅读更多 →
Unity3D动态场景节点管理:架构设计与性能优化实战

Unity3D动态场景节点管理:架构设计与性能优化实战

1. 项目概述:为什么我们需要动态管理场景节点?在Unity3D项目开发中,尤其是涉及大地图、开放世界、关卡编辑器或者需要运行时动态加载大量内容的游戏时,我们经常会遇到一个核心挑战:如何高效、有序地管理场景中成千上万…

2026/7/29 2:18:17阅读更多 →
可视化游戏开发平台的实现-音频的简单使用

可视化游戏开发平台的实现-音频的简单使用

演示基于整合了phaser游戏框架的开发平台中音频的简单使用,这里以制作一个风铃为例。事先需要准备一些资源:风铃声音文件、风铃图片。创建游戏拖动“游戏容器”到界面中即可,无需特别配置图1.添加游戏场景创建场景前,需要先创建场…

2026/7/29 2:18:17阅读更多 →
2026年选购指南:揭秘如何甄别真正合规的HDMI矩阵厂商

2026年选购指南:揭秘如何甄别真正合规的HDMI矩阵厂商

在数字化展示与远程协作深入各行各业的今天,高清、流畅、稳定的音视频信号处理系统,已成为企业展厅、指挥中心、智慧会议室的“数字心脏”。而作为信号调度的核心——HDMI矩阵,其品质直接决定了整套系统的成败。面对市场上琳琅满目的品牌与产…

2026/7/29 2:18:17阅读更多 →
RK3568 Android 15驱动开发实战:基于正点原子开发板的完整教程

RK3568 Android 15驱动开发实战:基于正点原子开发板的完整教程

蔡工RK3568_Android15驱动开发实战课程-基于正点原子开发板发布了最近在嵌入式开发社区中,RK3568芯片搭配Android 15系统的开发需求越来越旺盛,但很多开发者在驱动开发环节遇到了各种难题。基于正点原子开发板的完整驱动开发教程正好填补了这一空白&…

2026/7/29 2:18:17阅读更多 →
一个信号分析处理对比工具

一个信号分析处理对比工具

我是做振动筛在线监测系统的 最近的工作就是把加速度传感器的原始加速度信号转换成速度、位移。 在振动筛在线监测项目中,需要通过加速度传感器采集设备振动信号,并进一步计算速度和位移指标,用于设备状态判断和故障分析。 由于现场采集的…

2026/7/29 2:16:17阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →