React 使用ref属性调用子组件方法(也可以适用于父子传参)

注意:①需使用hooks函数组件 ②使用了antDesign组件库(可不用)

如何使用

父组件代码

javascript 复制代码
import React, { useState, useRef, useEffect } from 'react';
import { Button } from 'antd';
import Child from './components/child';

export default () => {
  const childRef = useRef();

  //使用ref调用子组件的方法
  const handleOpen = () => {
    childRef.current.showModal('Hello word');
  };
  return (
    <div>
      <Button type="primary" onClick={handleOpen}>
        点我
      </Button>
      <Child ref={childRef} />
    </div>
  );
};

子组件代码

javascript 复制代码
import React, { useImperativeHandle, forwardRef, useState, useRef, useEffect } from 'react';
import { Modal } from 'antd';

const ChildComponent = forwardRef((props, ref) => {
  const [isModalOpen, setIsModalOpen] = useState(false);
  const [data, setData] = useState('');

  //弹框打开
  const showModal = async (data) => {
    setIsModalOpen(true);
    setData(data);
  };
  //弹框确定
  const handleOk = async () => {
    setIsModalOpen(false);
  };
  //弹框取消
  const handleCancel = () => {
    setIsModalOpen(false);
  };
  // 通过第二个参数ref来控制暴露哪些方法
  useImperativeHandle(ref, () => ({
    showModal,
  }));

  return (
    <div>
      <Modal title="子组件" width={800} open={isModalOpen} onOk={handleOk} onCancel={handleCancel}>
        <div>{data}</div>
      </Modal>
    </div>
  );
});

export default ChildComponent;

注:本人前端小白 ,如有不对的地方还请多多指教

相关推荐
秦jh_5 分钟前
【Linux】多线程(概念,控制)
linux·运维·前端
蜗牛快跑21317 分钟前
面向对象编程 vs 函数式编程
前端·函数式编程·面向对象编程
Dread_lxy18 分钟前
vue 依赖注入(Provide、Inject )和混入(mixins)
前端·javascript·vue.js
涔溪1 小时前
Ecmascript(ES)标准
前端·elasticsearch·ecmascript
榴莲千丞1 小时前
第8章利用CSS制作导航菜单
前端·css
奔跑草-1 小时前
【前端】深入浅出 - TypeScript 的详细讲解
前端·javascript·react.js·typescript
羡与1 小时前
echarts-gl 3D柱状图配置
前端·javascript·echarts
guokanglun1 小时前
CSS样式实现3D效果
前端·css·3d
咔咔库奇2 小时前
ES6进阶知识一
前端·ecmascript·es6
渗透测试老鸟-九青2 小时前
通过投毒Bingbot索引挖掘必应中的存储型XSS
服务器·前端·javascript·安全·web安全·缓存·xss