声明式与命令式 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 的使用方式

相关推荐
benbenAItalk6 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
2601_962885727 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
西瓜太郎12347 小时前
Claude Code、Codex CLI、Gemini CLI 能否共用一枚 Key?先看协议选择矩阵
前端·api 网关·claude code·gemini cli·codex cli
多加点辣也没关系7 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
陈随易9 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
水域安全老周9 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
计算机魔术师10 小时前
Anthropic CEO突然喊踩刹车,OpenAI罕见力挺:AI这辆车不能只踩油门了
前端
wing9810 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
Highcharts.js10 小时前
常见报错排雷指南2:导出失败的官方解法
javascript·react.js·ecmascript·highcharts·可视化图表·导出模块失败·导出服务
EatFan10 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app