Изучение реализации нескольких модальных модулей в пользовательском интерфейсе Chakra: подробное руководство

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

Методы:

Метод 1: использование Portal и useState Hook

import { useState } from 'react';
import { Modal, ModalOverlay, ModalContent, Button } from '@chakra-ui/react';
function App() {
  const [isOpen1, setIsOpen1] = useState(false);
  const [isOpen2, setIsOpen2] = useState(false);
  const openModal1 = () => setIsOpen1(true);
  const openModal2 = () => setIsOpen2(true);
  return (
    <>
      <Button onClick={openModal1}>Open Modal 1</Button>
      <Button onClick={openModal2}>Open Modal 2</Button>
      {isOpen1 && (
        <Modal isOpen={isOpen1} onClose={() => setIsOpen1(false)}>
          <ModalOverlay />
          <ModalContent>
            {/* Modal 1 content */}
          </ModalContent>
        </Modal>
      )}
      {isOpen2 && (
        <Modal isOpen={isOpen2} onClose={() => setIsOpen2(false)}>
          <ModalOverlay />
          <ModalContent>
            {/* Modal 2 content */}
          </ModalContent>
        </Modal>
      )}
    </>
  );
}
export default App;

Метод 2: использование хука useRef и ModalManager пользовательского интерфейса Chakra

import { useRef } from 'react';
import { Modal, ModalOverlay, ModalContent, Button, useModalManager } from '@chakra-ui/react';
function App() {
  const modalManager = useModalManager();
  const modal1Ref = useRef();
  const modal2Ref = useRef();
  const openModal1 = () => modalManager.openModal({ id: 'modal1' });
  const openModal2 = () => modalManager.openModal({ id: 'modal2' });
  return (
    <>
      <Button onClick={openModal1}>Open Modal 1</Button>
      <Button onClick={openModal2}>Open Modal 2</Button>
      <Modal isOpen={modalManager.isOpen('modal1')} onClose={() => modalManager.closeModal({ id: 'modal1' })}>
        <ModalOverlay />
        <ModalContent ref={modal1Ref}>
          {/* Modal 1 content */}
        </ModalContent>
      </Modal>
      <Modal isOpen={modalManager.isOpen('modal2')} onClose={() => modalManager.closeModal({ id: 'modal2' })}>
        <ModalOverlay />
        <ModalContent ref={modal2Ref}>
          {/* Modal 2 content */}
        </ModalContent>
      </Modal>
    </>
  );
}
export default App;

Метод 3. Использование ModalStack пользовательского интерфейса Chakra

import { Modal, ModalOverlay, ModalContent, Button, useModal } from '@chakra-ui/react';
function App() {
  const { isOpen, onClose, onOpen } = useModal();
  return (
    <>
      <Button onClick={onOpen}>Open Modal 1</Button>
      <Button onClick={onOpen}>Open Modal 2</Button>
      <Modal isOpen={isOpen} onClose={onClose}>
        <ModalOverlay />
        <ModalContent>
          {/* Modal content */}
        </ModalContent>
      </Modal>
    </>
  );
}
export default App;

В этой статье мы рассмотрели различные способы одновременного открытия двух модальных окон в пользовательском интерфейсе Chakra. Мы рассмотрели три разных подхода, каждый со своей реализацией, на примерах кода. Эти методы включают в себя использование порталов и перехватчика useState, использование перехватчика useRef с ModalManager пользовательского интерфейса Chakra и использование ModalStack пользовательского интерфейса Chakra. Используя эти методы, вы можете создавать несколько модальных интерфейсов в своих приложениях React на основе пользовательского интерфейса Chakra.

Теги:

  • Интерфейс чакры
  • Реагировать
  • Модальные окна
  • Компоненты пользовательского интерфейса
  • Разработка интерфейса