如何在 React 中实现模态组件

介绍

模式是应用程序中的独立窗口,最常见的是作为对话框。它们是用于提供信息或要求确认的常见用户界面模式。

在本教程中,您将学习如何在 React 项目中实现模态组件。您将创建一个Dashboard组件来管理状态和一个按钮来访问模态。您还将开发一个Modal组件来构建一个模态和一个关闭按钮。单击按钮后,您的项目将显示并关闭模态。

先决条件

要完成本教程,您需要:

  • 在开始本教程之前对 React 有一个基本的了解。您可以通过阅读如何在 React.js系列中编码来了解有关 React 的更多信息

第 1 步 – 启动Dashboard组件

仪表板是您显示模态的地方。要开始您的仪表板,请将 React 实例和Component对象导入到您的Dashboard.js文件中。声明一个Dashboard组件并设置您的状态:

仪表板.js
import React, { Component } from "react";

class Dashboard extends Component {
  constructor() {
    super();
    this.state = {
      show: false
    };
    this.showModal = this.showModal.bind(this);
    this.hideModal = this.hideModal.bind(this);
  }

  showModal = () => {
    this.setState({ show: true });
  };

  hideModal = () => {
    this.setState({ show: false });
  };
}

export default Dashboard

您的州包括show价值为的财产false这允许您隐藏模式,直到用户提示它打开。这些函数showModal()使用.setState()方法更新您的状态,以将您的show属性值更改true为用户打开模态时的状态。同样,函数中.setState()方法hideModal()将关闭模态并将show属性中的值更改false

注意:请记住在constructor()using.bind()方法上绑定您的函数

一旦你应用了你的状态和函数,你的render()生命周期方法将处理在return()语句中显示你的模式

仪表板.js
import React, { Component } from "react";

class Dashboard extends Component {
  // ...
  render() {
    return (
      <main>
        <h1>React Modal</h1>
        <button type="button" onClick={this.showModal}>
          Open
        </button>
      </main>
    );
  }
}

export default Dashboard

button接受阵营JSX属性onClick应用.showModal()功能,并打开模式。您将Dashboard组件导出App连接到根 HTML 文件的高阶组件。

第 2 步 – 构建Modal组件

创建一个新文件,Modal.js并声明一个Modal带有三个参数的无状态功能组件handleCloseshow、 和children该参数show表示show您所在州属性:

模态.js
import './modal.css';

const Modal = ({ handleClose, show, children }) => {
  const showHideClassName = show ? "modal display-block" : "modal display-none";

  return (
    <div className={showHideClassName}>
      <section className="modal-main">
        {children}
        <button type="button" onClick={handleClose}>
          Close
        </button>
      </section>
    </div>
  );
};

您的return()语句传递参数children,表示为props.children,是对打开和关闭模态功能的引用。模态还包含一个带有 React JSXonClick属性的按钮,该属性接受该hideModal()方法,此处表示为参数handleClose,作为道具传递到您的Dashboard组件中。

该变量showHideClassName为其值分配一个条件,以检查show您所在州属性是否为true如果是这样,模态将出现。否则,模态将隐藏。属性display-block以及display-none显示和隐藏模式是通过modal.css导入到Modal组件中文件来处理的

启动一个新文件,modal.css并设置规则来设置您的大小、颜色和形状的样式Modal

模态.css
.modal {
  position: fixed;
  top: 0;
  left: 0;
  width:100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.6);
}

.modal-main {
  position:fixed;
  background: white;
  width: 80%;
  height: auto;
  top:50%;
  left:50%;
  transform: translate(-50%,-50%);
}

.display-block {
  display: block;
}

.display-none {
  display: none;
}

这将产生一个带有白框轮廓和阴影背景的居中模式。Modal完成您的组件后,让我们将您的组件集成到您的Dashboard.

第 3 步 – 合并Modal组件

要将您的 组合Modal到您的 中Dashboard,请导航到您的Dashboard.js文件并Modal在 React 实例化下方导入您的组件:

仪表板.js
import React, { Component } from "react";
import Modal from './Modal.js';

class Dashboard extends Component {
  // ...
  render() {
    return (
      <main>
        <h1>React Modal</h1>
        <Modal show={this.state.show} handleClose={this.hideModal}>
          <p>Modal</p>
        </Modal>
        <button type="button" onClick={this.showModal}>
          Open
        </button>
      </main>
    );
  }
}

export default Dashboard

在您的return()语句中,包含您的Modal组件以显示和隐藏模式。属性showhandleClose是来自Modal组件的道具,用于管理状态和hideModal()函数的逻辑

您的DashboardModal组件现在将在您的浏览器上呈现:

打开模态组件的屏幕截图。

观察您的新Modal组件现在如何打开和关闭。

结论

在本教程中,您了解了如何通过将 props 和功能从一个组件传递到另一个组件来使用 React 来实现模态。

要实时查看该项目,这里是该项目CodePen 演示

觉得文章有用?

点个广告表达一下你的爱意吧 !😁