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;

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

相关推荐
●VON4 分钟前
Flutter Web 开发:解决跨域(CORS)问题的终极指南
前端·flutter
一只大马猴呀16 分钟前
Windows 安装使用 nvm,Node.js、npm多版本管理、切换
前端·npm·node.js
网络点点滴20 分钟前
渐层响应式shallowRef和shallowReactive
前端·javascript·vue.js
@yanyu66622 分钟前
05计算属性与定时器
前端·javascript·vue.js
哈__25 分钟前
ReactNative项目OpenHarmony三方库集成实战:react-native-chart-kit
javascript·react native·react.js
小同志0027 分钟前
JQuery
前端·javascript·jquery
zdl68628 分钟前
SpringBoot返回文件让前端下载的几种方式
前端·spring boot·后端
拾贰_C29 分钟前
【Vue | vue3 | spring boot】前端前台项目搭建
前端·vue.js·spring boot
用户904438163246029 分钟前
大三面字节被问懵?手撕 WebSocket 与 SSE 底层原理,大厂通关指南
前端·面试
蓝黑202032 分钟前
Vue SFC Playground
前端·javascript·vue.js