• React 函数组件导出自定义方法的办法说明


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

    办法要点:

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

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

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

    export default forwardRef(Son)

    子组件示例: 

    1. import React, { useState, forwardRef, useImperativeHandle } from "react"
    2. function Son(props, ref) {
    3. const [a, setA] = useState(1);
    4. const [b, setB] = useState(2);
    5. function sonFunc() {
    6. console.log("我是儿子中的方法")
    7. }
    8. useImperativeHandle(ref, () => {
    9. return {
    10. sonFunc,
    11. setA,
    12. a: a,
    13. b
    14. }
    15. });
    16. return (
    17. <div id="headerBox">
    18. {a}
    19. div>
    20. )
    21. }
    22. export default forwardRef(Son)

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

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

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

    调用者(父组件)示例: 

    1. import React, { useState, useRef} from "react";
    2. import Son from "./Son";
    3. function Father(props, ref) {
    4. const childRef = useRef(null);
    5. function printRef() {
    6. console.log(childRef );
    7. }
    8. function doSonFunc() {
    9. childRef.current.sonFunc();
    10. childRef.current.setA(456);//把子组件中的a从1改变为456
    11. }
    12. return (
    13. <div className="Home">
    14. <Son ref={childRef } />
    15. <button onClick={printRef}>打印refbutton>
    16. <button onClick={doSonFunc}>执行儿子的方法button>
    17. div>
    18. )
    19. }
    20. export default Father

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

  • 相关阅读:
    Linux--CE--ansible安装以及配置主控服务器和被控服务器
    基于ghOSt用户调度器的环境搭建
    3.代码生成器编写
    Huggingface transformers 镜像使用,本地使用,tokenizer参数介绍
    整理笔记——二极管
    七、【React-Router5】嵌套路由
    【 React 】React 构建组件的方式有哪些?区别?
    ChatGPT:世界已经永远改变了,而大多数人尚无所觉
    SSM_Mybatis(下)
    NR 物理层编码 S1 -概述
  • 原文地址:https://blog.csdn.net/ababab12345/article/details/127786337