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;

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

相关推荐
金梦人生19 小时前
Css性能优化
前端·css
Holin_浩霖19 小时前
UI设计的底层逻辑:从组件到系统的跃迁
前端
Holin_浩霖19 小时前
前端开发者的 Web3 全图解实战 二
前端
写代码的皮筏艇19 小时前
CSS属性继承与特殊值
前端·css
kevlin_coder19 小时前
🚀 实现同一个滚动区域包含多个虚拟滚动列表
前端·javascript
金梦人生19 小时前
JS 性能优化
前端·javascript
我有一棵树19 小时前
使用Flex布局实现多行多列,每个列宽度相同
前端·css·html·scss·flex
浪裡遊19 小时前
React开发模式解析:JSX语法与生命周期管理
前端·javascript·react.js·前端框架·ecmascript
用户8772447539619 小时前
Lubanno7UniverSheet:开放底层能力,让你的表格需求 “不设限”
前端
张可爱19 小时前
ES6奶茶铺版通俗笔记 🍵✨
前端