在进行React开发时,函数组件是比较方便的,由于函数组件没有this指针,因此如果想在父组件里调用函数型子组件的方法,就需要用到React.useImperativeHandle 这个帮助函数。

办法要点:

1、在子组件中,使用useImperativeHandle函数将子组件中的方法暴露出去,在导出时使用forwardRef包裹导出的组件;

2、理解 useImperativeHandle 函数的两个参数:
        第一个参数ref即是函数组件自带的参数(props,ref)中的 ref。
        第二个参数是一个函数,函数返回的对象就是父组件中的 childRef.current

3、需要暴露方法的组件,在导出的时候,一定要加上forwardRef进行包裹

export default forwardRef(Son)

子组件示例: 

import React, { useState, forwardRef, useImperativeHandle } from "react"function Son(props, ref) {const [a, setA] = useState(1);const [b, setB] = useState(2);function sonFunc() {console.log("我是儿子中的方法")}useImperativeHandle(ref, () => {return {sonFunc,setA,a: a,b}});return (<div id="headerBox">{a}</div>)
}export default forwardRef(Son)

 4、在父组件中使用useRef(),并对子组件进行绑定 ref 。

打印的childRef中有一个属性叫做currentcurrent就是子组件暴露出来的实例句柄。

点击父亲的执行按钮,就可以通过childRef.current.sonFunc()执行子组件的方法sonFun,也可以执行儿子中的改变state的方法setA,从而通过父组件来改变子组件的状态值。

调用者(父组件)示例: 

import React, { useState, useRef} from "react";
import Son from "./Son";function Father(props, ref) {const childRef = useRef(null);function printRef() {console.log(childRef );}function doSonFunc() {childRef.current.sonFunc();childRef.current.setA(456);//把子组件中的a从1改变为456}return (<div className="Home"><Son ref={childRef } /><button onClick={printRef}>打印ref</button><button onClick={doSonFunc}>执行儿子的方法</button></div>)
}export default Father

这个方法不仅是可以用来调用儿子的方法,对于儿子的状态属性,也是能够传过来的。

React 函数组件导出自定义方法的办法说明相关推荐

  1. 从一个表格render方法问题看React函数组件的更新

    从一个表格render方法问题看React函数组件的更新 最近在开发中碰到了一个现象觉得很有典型能作为例子所以给大家分享一下,从这个现象我们能很清楚的看到函数组件的更新的特点,以及我们应该如何去理解和 ...

  2. onclick=两个函数_[译]React函数组件和类组件的差异

    [译]React函数组件和类组件的差异 原文: https://overreacted.io/how-are-function-components-different-from-classes/ 在 ...

  3. 深入学习React函数组件性能优化三剑客useMemo、useCallback、memo

    Hook使用规则 只能在函数的最外层调用Hook,不能在循环.条件判断或子函数中调用. 只能在React函数组件或自定义Hook中调用Hook,不可在其他JavaScript函数中使用. useMem ...

  4. react函数组件 更新自动展示和暴露方法给父组件

    react函数组件 子组件接收参数变化时form表单自动接收展示 在更新数据时,子函数组件接收如组件传递过来的参数进行解析并展示,初始值通过initialValue属性定义. initialValue ...

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

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

  6. React函数组件和类组件的区别

    定义组件有两个要求: 组件名称必须以大写字母开头 组件的返回值只能有一个根元素 函数组件 函数组件接收一个单一的 props 对象并返回了一个React元素 类组件 class Welcome ext ...

  7. react函数组件实现四栏轮播图切换

    实现的功能为一个轮播图,分为纵向四栏,切换的时候四部分延迟切换. 主题思想:将底部整体的div分为四部分,纵向四等分,每部分都是当前要展示的图片,通过定位拼接到一起,看起来跟原版的图片一样,给四部分c ...

  8. React 函数组件中无法清除定时器问题

    问题: 在离开当前组件页面后,清除定时器,定时器的标识会在一瞬间变为 undefined , 但立马就会又重新开始执行定时器,而且定时器标识不变. 原因: 函数组件的本质是一个函数,而在在一个局部函数 ...

  9. react 函数组件暴露方法

    场景 部分时候希望在子组件中暴露方法给父组件,使用 Class 组件时配合 ref 很容易拿到子组件实例,并且可以执行子组件上的方法. 但是函数组件没有组件实例,就算使用 ref 转发,也只会把 re ...

最新文章

  1. 网络营销的探索与爆发
  2. RDA8955的新版本SDK串口接收数据的问题记录
  3. 【读书笔记】编写高质量的代码Web前端开发修炼之道——曹刘阳
  4. 错误Read timed out.
  5. (92)低速接口UART、IIC、SPI介绍,面试必问(十六)(第19天)
  6. 在iView中动态创建表格
  7. Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程—提供全套安装包)—nrm的安装与配置(5)
  8. Mysql基础系列(一)
  9. MAC使用青花瓷(charles)抓包
  10. Ubuntu16.04 下安装运行 rovio-slam
  11. VS2019项目自动包含bin或obj文件夹的问题
  12. luoguT30208 太极剑(贪心)
  13. 指纹存取控制系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. QT 自学内容 day03 listWidget ,treeWidget,tableWidget ,stackedWidget,模态,和非模态 多种 对话框的的使用
  15. RGB 到HSV转换 摘自wiki百科
  16. 百度android 升级,百度浏览器去广告版下载-百度浏览器v6.4.21安卓去广告去升级版-ucbug软件站...
  17. 上传多组带标题的图片
  18. android webview第三方框架,Android 中使用第三方 WebView,腾讯X5浏览器
  19. phpCMS V9 - 使用教程
  20. 用Python截图(顶级理解)

热门文章

  1. Acwing 378.骑士放置(二分图的最大独立集)
  2. TK:安全的核心仍在于重视 移动安全应更多的考虑耦合风险
  3. Visual Studio 2019 下载地址
  4. easyopen——一个简单易用的接口开放平台
  5. 前端?请叫我游戏开发
  6. codeforces 545D. Queue
  7. 一个前端工程师的基本修养
  8. 笔记本电脑不显示计算机,笔记本电脑屏幕不显示怎么回事
  9. Javafx顶级容器Stage(舞台)
  10. thinkphp6 发送短信验证码