声明式与命令式 Modal 之争

Modal 是后台管理系统的三大重要组件之一

怎么才算正确使用 Modal 引发很多前端开发人员的讨论~

下面是基于 Ant Design 组件库说一下两种使用方式

声明式 Modal 是指组件的显示由某个"状态"来控制,通过行为控制状态的值来控制的组件的显示与隐藏,对象是"状态"

事件控制状态,状态控制 Modal。也就是下面的使用逻辑

jsx 复制代码
visible && <Modal/>

使用 Ant Design 举个例子:

tsx 复制代码
import React, { useState } from 'react';
import { Button, Modal } from 'antd';

const App: React.FC = () => {
  const [isModalOpen, setIsModalOpen] = useState(false);

  const showModal = () => {
    setIsModalOpen(true);
  };

  const handleOk = () => {
    setIsModalOpen(false);
  };

  const handleCancel = () => {
    setIsModalOpen(false);
  };

  return (
    <>
      <Button type="primary" onClick={showModal}>
        Open Modal
      </Button>
      <Modal title="Basic Modal" open={isModalOpen} onOk={handleOk} onCancel={handleCancel}>
        <p>Some contents...</p>
        <p>Some contents...</p>
        <p>Some contents...</p>
      </Modal>
    </>
  );
};

export default App;

命令式编程强调的是发出命令,告诉程序去执行某些操作。在命令式的模式下,开发者手动控制模态框的显示和隐藏,通常不依赖于状态驱动,而是通过调用函数或方法来直接控制模态框的行为。强调的对象是事件

命令式 Modal 允许你从外部代码直接控制模态框的显示和关闭,这通常是通过访问和操作模态框实例或引用来实现的

Modal 的逻辑在事件里

使用 Ant Design 举个例子:

tsx 复制代码
import React from 'react';
import { Button, Modal, Space } from 'antd';

const handleClick = () => {
  Modal.info({
    title: 'This is a notification message',
    content: (
      <div>
        <p>some messages...some messages...</p>
        <p>some messages...some messages...</p>
      </div>
    ),
  });
};

const App: React.FC = () => (
  <Space wrap>
    <Button onClick={handleClick}>Info</Button>
  </Space>
);

export default App;

总结

技术没有对错之分,只管合适与否。请结合实际业务需求选择 Modal 的使用方式

相关推荐
weixin_382395238 小时前
为小工厂量身打造:本地部署的物料管理系统带缺料计算
前端·制造
__zRainy__8 小时前
解决pnpm v10+不自动构建
前端·pnpm·工程化
猫猫不是喵喵.8 小时前
Vue3 Props 属性
前端·javascript·vue.js
醉城夜风~9 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华10 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子12 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅13 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni13 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学14 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端