react 函数组件父组件调用子组件方法

2023-11-11

react 函数组件父组件调用子组件方法

父组件利用ref对子组件做标记,通过调用子组件方法更改子组件状态,也可以调用子组件方法

首先在父组件中 ,使用useRef创建一个ref

import LogModal from "./logModal";
import  { memo, useRef } from "react";
export default memo(() => {
const LogModalRef = useRef(null);
const handleClick=()=>{
LogModalRef.current.show()//父组件调用子组件方法
}
return (
    <>
      <button onClick={handleClick}>点击</button>
      <LogModal ref={LogModalRef} />
    </>
  );
})

其次,子组件中利用forwardRef,useImperativeHandle

React.forwardRef(render):返回一个组件,参数是一个 render函数,函数的第一个参数为父组件传递的 props,第二个参数为父组件传递的 ref,forwardRef会创建一个React组件,这个组件能够将其接受的 ref 属性转发到其组件树下的另一个组件中。

useImperativeHandle :正常情况下 ref 是不能挂在到函数组件上的,因为函数组件没有实例,但是 useImperativeHandle 为我们提供了一个类似实例的东西。第一个参数是定义 current 对象的 ref,第二个参数是一个函数,返回值是一个对象,即这个 ref 的 current 对象,通过自定义父组件的 ref 来使用子组件 ref 的某些方法。

import { useRef, forwardRef, useImperativeHandle } from "react";
import  { memo, useRef } from "react";
const LogModal = forwardRef((props, LogModalRef) => {//第二个参数为父组件传递的 ref

//子组件暴露方法
 useImperativeHandle(LogModalRef, () => ({
    show
  }));
  
   const modalRef = useRef(null);
    const show = () => {
    modalRef.current.show();
  };
  
  return (
    <Modal ref={modalRef}>
     xxx
    </Modal>
  );
});
}
export default LogModal;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react 函数组件父组件调用子组件方法 的相关文章

  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • Three.js:缩放几何图形后错误的 BoundingBox

    在我的场景中 我有一个简单的立方体 var test new THREE Mesh new THREE CubeGeometry 10 10 10 new THREE MeshBasicMaterial scene add test 该立方
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 如何使用javascript将大图像转换为十六进制?

    如果我尝试将图像转换为十六进制 无论我使用哪个函数 我都会收到此错误消息 该图像的大小为 7 MB 19812 毫秒 清理 1401 2 1455 0 gt 1401 2 1455 0 MB 9 9 0 ms 自上次 GC 以来 8 3 m
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • Snap.svg - 停止在可悬停元素的子元素上重新触发悬停事件

    对于一个项目 我使用的 SVG 形状由背景多边形和背景多边形上方的一些文本 我已将其转换为路径 组成 我正在使用 Snap svg 为我的形状设置动画 当我将鼠标悬停在多边形上时 形状应该缩放到特定尺寸 包括其中的所有内容 鼠标移开时 形状
  • React-Redux:state.setIn() 和 state.set() 有什么区别?

    我见过使用setIn and set 在一些react redux代码中 state setIn state set 我在这里找到了一些文档https facebook github io immutable js https facebo
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 使用 CSS 或 Javascript 填充动画

    我只是想知道是否可以使用 CSS 或 javascript 创建填充动画 基本上我想创建一个填充动画 如下图所示 http i40 tinypic com eit6ia png http i40 tinypic com eit6ia png
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 在 ReactJS 中创建动态目录

    我有一个组件 它代表一个页面 其中有多个SectionHeader 组件作为该页面的子组件 我想通过检查 Page 的子项 SectionHeaders 来动态创建目录
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • 如何渲染变量(或 prop)内部的 jsx/html?

    const Footer gt let a b Hey b return div Some bold text a div 这只会呈现为Some bold text b Hey b 如何将粗体文本渲染为粗体 变量内容是我自己的 所以我不必担
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la

随机推荐

  • 快速成长的秘诀|如何实现自我认知升级?

    一 写在开始 精英人数的增长速度持续加快后 很多人开始焦虑 我也焦虑 深知要走出焦虑不容易 我想把走出焦虑快速成长的认知和方法写成文章分享给更多人 做成PPT给更多人面对面分享 快速成长总共三篇 分别是 完成自己的认知升级 自我成长的方法
  • Network Password Recovery工具查看windows凭据隐藏密码

    查看windows凭据密码 方法一 使用重装系统工具里面自带的修改密码工具来修改或者清除密码 方法二 查看windows凭据密码 这里居然看不了 需要用到 nirsoft 公司做的免费工具 Network Password Recovery
  • switch_to

    理论部分请参考 深入理解Linux 内核 第三章 1 switch to 宏 define switch to prev next last do last switch to prev task thread info prev task
  • C/C++ --- 全局变量初始化总结

    注意 本文所说的全局变量指的是 variables with static storage 措词来自 c 的语言标准文档 什么时候初始化 根据 C 标准 全局变量的初始化要在 main 函数执行前完成 常识无疑 但是这个说法有点含糊 mai
  • 就业管理系统【软件建模与分析UML课设】

    觉得好记得点赞 关注我哦 界面设计如何不重要 重在画图 概 述 1 1系统目标 建设集就业管理办公自动化 毕业生与用人单位信息管理 就业部门形象化宣传为一体的综合性管理系统 组建一个具备人才管理 人才交流等功能的综合性信息系统 使整个人才交
  • mysql MHA集群安装

    一 主机规划 IP Hostname Master Slave Manager Node Data Node 10 22 83 42 node1 Master Data Node 10 22 83 26 node2 Slave Data N
  • 如何使用Egret制作游戏?

    好的 下面是使用Egret制作游戏的详细教程 一 前期准备 1 安装Egret Wing开发环境 可以在官网下载 https www egret com products wing html 2 安装Egret Engine 可以在官网下载
  • BES2300Z USB mode 讲解

    hello 在BES的蓝牙中有一些芯片是支持USB mode 在使用的过程中 在BT mode 和 USB mode 中只能有一种模式存在 排版会有点乱 请谅解 下面来讲解下BES2300Z 在USB mode 下打开的方法 遇到的一些问题
  • robotframework安装与详解

    Robot Framework 以下简称rf 是一款python编写的功能自动化测试框架 具备良好的可扩展性 支持关键字驱动 可以同时测试多种类型的客户端或者接口 可以进行分布式测试执行 主要用于轮次很多的验收测试和验收测试驱动开发 ATD
  • Python requests ip代理爬虫报错 HTTPSConnectionPool(host=‘xxxxx‘, port=443) Max retries exceed

    本人系统 macOS10 15 6 Catalina 场景 使用Python requests 包 ip代理池爬取网站数据 出现报错 HTTPSConnectionPool host xxxxx port 443 Max retries e
  • JDBC实现

    JDBC编程步骤如下 1 Load the Driver 加载驱动 1 注冊驱动有三种方式 1 Class forName com mysql jdbc Driver 推荐这样的方式 不会对详细的驱动类产生依赖 2 DriverManage
  • 菜鸟学习篇--Vuecli4.0 Vant ui组件样式无效果

    新建了个vue项目 按需引入vant组件的时候 发现页面不出样式效果 解决办法是 第一步 在bable config js文件中加入 plugins import libraryName vant libraryDirectory es s
  • git需要掌握的基础知识

    Git的简介 Git 是一款免费的 开源的 分布式的版本控制系统 旨在快速高效地处理无论规模大小的任何软件工程 每一个 Git克隆 都是一个完整的文件库 含有全部历史记录和修订追踪能力 不依赖于网络连接或中心服务器 其最大特色就是 分支 及
  • 7 个隐藏的 Blender 技巧将改善您的工作流程

    谁不喜欢秘密技巧 因为 Blender 是一个全面的 多功能的工具 所以有很多隐藏的复活节彩蛋 隐藏在可见表面之下的时尚工具和功能 对于今天的文章中 让我们来找出了最好的秘诀Blender技巧以提高您的工作流程与效率 1 轻松选择集合中的所
  • Spring + MyBatis

    MyBatis ORM 对象 关系映射 完成对象数据到关系型数据映射的机制称为对象 关系映射 1 MyBatis是一个ORM框架 也是一个持久层框架 MyBatis封装了JDBC 将数据库中的表数据自动封装到对象中 这样就可以以面向对象的方
  • 快手小店怎么引流?快手怎么做店铺引流?

    短视频的内容丰富 更能吸引广大用户 因为它可以让用户得到视觉的享受等等 就像快手平台 以短视频迅速攻占用户的心 尤其是三四线城市的用户 非常喜欢在快手上分享自己的生活和见闻 现在就连淘宝也想借助快手平台为自己的店铺进行引流 快速实现产品的变
  • IDEA常用插件之注解插件

    文章目录 注解插件 JavaDoc插件 安装 修改配置 生成文档加入自己信息 Easy JavaDoc 安装插件 在线安装 离线安装 中文名自动转英文 加注释 默认快捷键 可通过IDEA快捷键设置修改 注解插件 JavaDoc插件 安装 修
  • 数据库SQL语句期末总复习

    文章目录 SQL的分类 DDL数据定义语言 数据库的定义与撤销 基本表的定义与维护 索引的建立与删除 DQL数据查询语言 单表查询 查询结果排序 分组查询 连接查询 嵌套查询 集合查询 DML数据操作语言 插入数据 更新数据 删除数据 视图
  • 创建HttpPost和HttpGet请求

    1 创建工具类 HttpClient import com alibaba fastjson JSON import org apache http HttpStatus import org apache http client conf
  • react 函数组件父组件调用子组件方法

    react 函数组件父组件调用子组件方法 父组件利用ref对子组件做标记 通过调用子组件方法更改子组件状态 也可以调用子组件方法 首先在父组件中 使用useRef创建一个ref import LogModal from logModal i