• 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

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

  • 相关阅读:
    java并发编程之基础与原理1
    NeuralRecon拜读:单目视频实时连贯三维重建
    前端开发如何做新手引导
    算法结构之选择排序
    【软考】敏捷方法
    洗地机选购攻略,洗地机哪个品牌好?一篇教会你挑到好用的洗地机
    Netty 3 - 组件和设计
    洛谷 P3275 [SCOI2011]糖果(差分约束,tarjan强连通分量,scc)
    141、★并查集-LeetCode-冗余连接Ⅰ和Ⅱ
    EM聚类(下):用EM算法对王者荣耀英雄进行划分
  • 原文地址:https://blog.csdn.net/ababab12345/article/details/127786337