React 函数组件父组件调用子组件函数

子组件:使用forwardRef将 ref 转发到子组件。

import React, { useState, useImperativeHandle, forwardRef } from 'react';
import { Popup } from 'antd-mobile';
import styles from './index.css';
interface GpupopProps {
  PopupContent: React.ReactNode;
}
export interface GpupopHandle {
  openPopup: () => void;
  closePopup: () => void;
}

const Gpupop = forwardRef<GpupopHandle, GpupopProps>(({ PopupContent }, ref) => {
  const [visible, setVisible] = useState(false);
//用于自定义暴露给父组件的实例值。它两个参数:ref 和一个创建实例值的回调函数。
  useImperativeHandle(ref, () => ({
    openPopup: () => setVisible(true),
    closePopup: () => setVisible(false),
  }));

  return (
    <div className={styles.Gpupop}>
      <Popup
        visible={visible}
        onMaskClick={() => {
          setVisible(false);
        }}
        bodyStyle={{
          borderTopLeftRadius: '8px',
          borderTopRightRadius: '8px',
          minHeight: '40vh',
        }}
      >
        {PopupContent}
      </Popup>
    </div>
  );
});

export default Gpupop;

父组件

<div  onClick={() => {
			//调用子组件方法
			  PopupRef.current?.openPopup();
          }}>
          openGpupop
</div>
 <Gpupop ref={PopupRef} PopupContent={<div>aaa</div>} />
React中,函数组件(Functional Components)并不直接支持像类组件那样的实例方法调用函数组件没有自己的状态和生命周期方法,它们通常使用props来传递数据和行为。如果你想要在组件调用组件的方法,你可以通过以下几种方式: 1. **Props传值**:将方法作为props传递给组件,然后在组件内部执行。例如: ```jsx function ParentComponent() { const handleClick = () => { // 这里执行的动作 }; return <ChildComponent onClick={handleClick} />; } function ChildComponent({ onClick }) { // 组件内部可以访问onClick方法 return <button onClick={onClick}>点击我</button>; } ``` 2. **使用回调函数或事件处理程序**:对于事件,组件可以提供一个函数组件在其生命周期内触发这个函数。例如: ```jsx function ParentComponent() { const handleClickInChild = (data) => { // 处理组件传递的数据 }; return ( <ChildComponent onAction={(data) => handleClickInChild(data)} /> ); } function ChildComponent({ onAction }) { function handleClick() { onAction(someData); } // 在组件内部触发事件 return <button onClick={handleClick}>点击我</button>; } ``` 3. **高阶组件(HOC)**:如果需要频繁地共享行为,可以考虑使用高阶组件(HOC),但这不是React函数组件的标准用法。 这些方法都是在React的无状态函数(stateless)和不可变数据原则下实现的,确保了组件的可预测行为和组件间的松耦合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值