返回

重拳出击!React造轮第二弹:Dialog组件直击痛点

前端

前言

提到简历项目,很多初学者都会遇到一个问题:没有项目可写。为了帮助大家解决这个难题,我特意打造了React造轮系列,帮助大家从零开始,一步步搭建自己的项目。

本轮子将使用React + TypeScript + Webpack作为技术栈,打造一个功能强大的对话框组件。告别冗杂的代码和框架依赖,用最简洁的方式实现弹框交互。

本文适合人群:

  • 想学习React组件开发的新手
  • 想深入理解React工作原理的开发者
  • 想打造自己的前端项目库的同学
  • 对UI组件开发感兴趣的开发者

本文内容:

  • 对话框组件介绍
  • Dialog组件搭建步骤
  • Dialog组件功能解析
  • Dialog组件使用案例

温馨提示:

  • 为了更好地理解本文,建议您具备一定的React基础。
  • 本文的源码已上传至GitHub,欢迎大家下载学习。

对话框组件介绍

对话框组件,又称弹窗组件或模态框,是一种常见的前端UI组件。它可以用来显示提示信息、收集用户输入或进行确认操作。对话框组件通常由一个弹出窗口和一个遮罩层组成,当用户点击按钮或触发某个事件时,对话框组件就会出现。

Dialog组件搭建步骤

1. 初始化项目

首先,我们需要创建一个新的React项目。可以使用create-react-app工具快速创建一个React项目。

npx create-react-app dialog-component

2. 安装依赖项

接下来,我们需要安装所需的依赖项。

npm install typescript @types/react @types/react-dom

3. 配置TypeScript

在tsconfig.json文件中,我们需要添加以下配置:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "jsx": "react",
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "./build",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "noImplicitAny": false,
    "skipLibCheck": true
  },
  "include": [
    "src"
  ]
}

4. 创建Dialog组件

在src文件夹下,创建一个Dialog.tsx文件,并添加以下代码:

import React, { useState } from 'react';
import { createPortal } from 'react-dom';

interface DialogProps {
  title: string;
  content: string;
  visible: boolean;
  onClose: () => void;
}

const Dialog: React.FC<DialogProps> = (props) => {
  const { title, content, visible, onClose } = props;

  const handleClose = () => {
    onClose();
  };

  return createPortal(
    <>
      <div className="modal-backdrop fade show" />
      <div className="modal modal-dialog-centered" role="dialog" aria-modal="true">
        <div className="modal-dialog" role="document">
          <div className="modal-content">
            <div className="modal-header">
              <h5 className="modal-title">{title}</h5>
              <button type="button" className="close" data-dismiss="modal" aria-label="Close" onClick={handleClose}>
                <span aria-hidden="true">&times;</span>
              </button>
            </div>
            <div className="modal-body">
              {content}
            </div>
            <div className="modal-footer">
              <button type="button" className="btn btn-primary" onClick={handleClose}>关闭</button>
            </div>
          </div>
        </div>
      </div>
    </>,
    document.getElementById('modal-root')
  );
};

export default Dialog;

5. 使用Dialog组件

在App.tsx文件中,添加以下代码:

import React, { useState } from 'react';
import Dialog from './Dialog';

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

  const handleOpenDialog = () => {
    setVisible(true);
  };

  const handleCloseDialog = () => {
    setVisible(false);
  };

  return (
    <>
      <button type="button" className="btn btn-primary" onClick={handleOpenDialog}>打开对话框</button>
      <Dialog
        title="这是一个对话框"
        content="这是一个对话框的内容"
        visible={visible}
        onClose={handleCloseDialog}
      />
    </>
  );
};

export default App;

6. 运行项目

在项目根目录下,运行以下命令:

npm start

即可启动项目。

Dialog组件功能解析

Dialog组件主要由以下几个部分组成:

  • 遮罩层:使用div元素创建,类名为"modal-backdrop fade show",用于覆盖整个页面。
  • 弹出窗口:使用div元素创建,类名为"modal modal-dialog-centered",用于放置对话框内容。
  • 对话框内容:使用div元素创建,类名为"modal-content",包含对话框标题、正文和底部按钮。
  • 对话框- 关闭按钮:使用button元素创建,类名为"close",用于关闭对话框。
  • 对话框正文:使用div元素创建,类名为"modal-body",用于显示对话框内容。
  • 对话框底部按钮:使用div元素创建,类名为"modal-footer",用于放置对话框按钮。

Dialog组件使用案例

Dialog组件可以用于多种场景,例如:

  • 显示提示信息:当用户需要确认或取消某个操作时,可以使用Dialog组件显示提示信息。
  • 收集用户输入:当用户需要输入信息时,可以使用Dialog组件收集用户输入。
  • 进行确认操作:当用户需要确认某个操作时,可以使用Dialog组件进行确认操作。

结语

以上就是本期内容。希望通过本期的分享,能够帮助大家深入理解Dialog组件的搭建和使用。

在下一期的内容中,我们将继续探讨React造轮系列,敬请期待!