react传递函数与回调函数原理

为什么 React 允许直接传递函数?

回调函数核心逻辑

复制代码
// 父组件 (ParentComponent.tsx)
import React, { useState } from 'react';
import { Modal, Button } from 'antd';
import ModalContent from './ModalContent';

const ParentComponent = () => {
  const [visible, setVisible] = useState(false);

  // 用于关闭 Modal 的回调函数
  const hideModal = () => setVisible(false);

  return (
    <>
      <Button type="primary" onClick={() => setVisible(true)}>
        新增算子
      </Button>

      <Modal
        title="新增算子"
        visible={visible}
        onCancel={hideModal}  // 关闭 Modal 的回调函数
        footer={null}  // 自定义 footer 按钮
      >
        {/* 将回调函数传递给子组件 */}
        <ModalContent onClose={hideModal} />
      </Modal>
    </>
  );
};

export default ParentComponent;

// 子组件 (ModalContent.tsx)
import React from 'react';
import { Button } from 'antd';

interface ModalContentProps {
  onClose: () => void;  // 父组件传递来的回调函数
}

const ModalContent: React.FC<ModalContentProps> = ({ onClose }) => {
  return (
    <div>
      <p>这是新增算子的内容</p>
      <Button type="primary" onClick={onClose}>确认</Button>  {/* 调用传递来的回调函数 */}
      <Button onClick={onClose}>取消</Button>  {/* 调用传递来的回调函数 */}
    </div>
  );
};

export default ModalContent;

具体例子

父组件

复制代码
          <div>
            <Modal
              title="添加算子"
              open={open}
              confirmLoading={confirmLoading}
              onOk={handleOk}
              onCancel={handleCancel}
              centered={true}
              footer={null} // 不使用 Modal 自带的 footer
            >
              <AddOptsModal onCancel={handleCancel}></AddOptsModal>
            </Modal>
          </div>
  const [open, setOpen] = useState(false)
  const handleCancel = () => {
    setOpen(false)
  }

子组件

复制代码
import { Button } from 'antd'
interface AddOptsModalProps {
  onCancel: () => void
}

const AddOptsModal: React.FC<AddOptsModalProps> = ({ onCancel }) => {
  return (
    <div>
      <Button onClick={onCancel}>关闭</Button>
    </div>
  )
}
export default AddOptsModal
相关推荐
Irene19912 小时前
ElementPlus 与成熟后台框架对比:vue-element-plus-admin、vue-pure-admin等
前端·ui·框架·vue3
尘中客6 小时前
放弃 Echarts?前端直接渲染后端高精度 SVG 矢量图流的踩坑记录
前端·javascript·echarts·前端开发·svg矢量图·echarts避坑
FreeBuf_6 小时前
Chrome 0Day漏洞遭野外利用
前端·chrome
小彭努力中6 小时前
199.Vue3 + OpenLayers 实现:点击 / 拖动地图播放音频
前端·vue.js·音视频·openlayers·animate
2501_916007476 小时前
网站爬虫原理,基于浏览器点击行为还原可接口请求
前端·javascript·爬虫·ios·小程序·uni-app·iphone
前端大波7 小时前
Sentry 每日错误巡检自动化:设计思路与上手实战
前端·自动化·sentry
Highcharts.js8 小时前
适合报表系统的可视化图表|Highcharts支持直接导出PNG和PDF
javascript·数据库·react.js·pdf
ZC跨境爬虫8 小时前
使用Claude Code开发校园交友平台前端UI全记录(含架构、坑点、登录逻辑及算法)
前端·ui·架构
慧一居士8 小时前
Vue项目中,何时使用布局、子组件嵌套、插槽 对应的使用场景,和完整的使用示例
前端·vue.js
叫我一声阿雷吧8 小时前
JS 入门通关手册(35):执行上下文、调用栈与作用域链深度解析
javascript·作用域链·js进阶·执行上下文·调用栈·变量提升·闭包原理