• 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

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

  • 相关阅读:
    Himall商城Web帮助类 获得http请求数据
    [MySQL] MySQL库的基础操作
    摄影构图:人像摄影和风景摄影的一些建议
    springmvc@RequestBody原理及扩展
    互联网摸鱼日报(2024-06-26)
    nginx负载均衡策略
    LeetCode 0491. 递增子序列
    Maximum cardinality matching
    插入排序(思路分析) [数据结构][Java]
    java网络编程-双机通信
  • 原文地址:https://blog.csdn.net/ababab12345/article/details/127786337