Поиск по сайту:

Как реализовать модальный компонент в React


Введение

Модальные окна — это отдельные окна в приложении, чаще всего в виде диалогового окна. Они представляют собой распространенный шаблон пользовательского интерфейса для предоставления информации или запроса подтверждения.

В этом руководстве вы узнаете, как реализовать модальный компонент в вашем проекте React. Вы создадите компонент Dashboard для управления состоянием и кнопку для доступа к модальному экрану. Вы также разработаете компонент Modal для создания модального окна и кнопки для закрытия. Ваш проект будет отображать и закрывать модальное окно при нажатии кнопки.

Предпосылки

Для выполнения этого урока вам понадобятся:

  • Основное понимание React перед началом работы с этим руководством. Вы можете узнать больше о React, ознакомившись с серией статей How to Code in React.js.

Шаг 1 — Запуск компонента панели мониторинга

Панель инструментов — это место, где вы будете отображать свое модальное окно. Чтобы начать работу с информационной панелью, импортируйте экземпляр React и объект Component в файл Dashboard.js. Объявите компонент Dashboard и установите свое состояние:

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 на ложь.

Примечание. Не забудьте привязать свои функции к constructor() с помощью метода .bind().

После того, как вы применили свое состояние и функции, ваш метод жизненного цикла render() будет обрабатывать отображение вашего модального окна в операторе return():

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 принимает атрибут React JSX onClick, чтобы применить функцию .showModal() и открыть модальное окно. Вы экспортируете свой компонент Dashboard в компонент App более высокого порядка, связанный с вашим корневым файлом HTML.

Шаг 2 — Создание модального компонента

Создайте новый файл Modal.js и объявите функциональный компонент Modal без сохранения состояния с тремя аргументами, handleClose, show и дети. Аргумент show представляет свойство show в вашем состоянии:

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 JSX onClick, который принимает метод hideModal(), представленный здесь как переданный аргумент handleClose. в качестве реквизита в компонент Dashboard.

Переменная showHideClassName присваивает своему значению условное выражение, чтобы проверить, является ли значение свойства show в вашем состоянии true. Если это так, появится модальное окно. В противном случае модальное окно будет скрыто. Свойства display-block и display-none для отображения и скрытия модального окна обрабатываются через файл modal.css, импортированный в ваш . Модальный компонент.

Создайте новый файл modal.css и задайте правила для стиля размера, цвета и формы вашего Modal:

.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 с вашей Dashboard, перейдите к файлу Dashboard.js и импортируйте свой компонент Modal ниже вашего Реагировать на воображения:

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 для отображения и скрытия модального окна. Атрибуты show и handleClose являются свойствами вашего компонента Modal для управления логикой вашего состояния и hideModal() функция.

Ваши компоненты Dashboard и Modal теперь будут отображаться в вашем браузере:

Посмотрите, как теперь открывается и закрывается ваш новый компонент Modal.

Заключение

В этом руководстве вы узнали, как можно использовать React для реализации модальных окон путем передачи реквизитов и функций из одного компонента в другой.

Чтобы просмотреть этот проект вживую, вот демо CodePen этого проекта.