Publicado em: 17/03/2025

Au 11 - Front-end - React - Criando uma modal - Mestres BEGIN


Nesta aula, desenvolvemos um componente modal genérico que pode ser utilizado em diversos cenários da aplicação para exibir mensagens e interações ao usuário.

Estrutura do Componente

Principais características do modal:

  • Controle de visibilidade via prop isOpen
  • Mecanismo de fechamento via prop onClose
  • Conteúdo flexível através de children
  • Fechamento ao clicar fora do conteúdo

Implementação do Código

1import React, { MouseEvent } from "react";
2import "./Modal.css";
3interface Props {
4    children: JSX.Element;
5    onClose: () => void
6}
7const Modal = ({ onClose, children }: Props) => {
8    const handleClick = () => {
9        onClose();
10    };
11    const handleStopPropagation = (e: React.MouseEvent<HTMLDivElement>) => {
12        e.stopPropagation();
13    };
14    return (
15        <div className="modal-overlay" onClick={handleClick}>
16            <div onClick={handleStopPropagation} className="modal-content">
17                {children}
18            </div>
19        </div>
20    );
21};
22export default Modal;

Estilização CSS

1.modal-overlay {
2    position: fixed;
3    top: 0;
4    left: 0;
5    right: 0;
6    bottom: 0;
7    background-color: rgba(0, 0, 0, 0.5);
8    display: flex;
9    align-items: center;
10    justify-content: center;
11    z-index: 1000;
12}
13.modal-content {
14    background: white;
15    padding: 2rem;
16    border-radius: 8px;
17    max-width: 500px;
18    width: 90%;
19    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
20}

Utilização do Componente

Exemplo de implementação:

1function App() {
2    const [showModal, setShowModal] = useState(false);
3    return (
4        <>
5            <button onClick={() => setShowModal(true)}>
6                Abrir Modal
7            </button>
8            {showModal ? (
9                <Modal onClose={() => setShowModal(false)}>
10                    <h2>Ação concluída com sucesso!</h2>
11                    <p>O produto foi cadastrado no sistema.</p>
12                    <button onClick={() => setShowModal(false)}>
13                        Fechar
14                    </button>
15                </Modal>
16            ) : null}
17        </>
18    );

Boas Práticas

  • Componente puro e desacoplado
  • Controle de estado externo
  • Acessibilidade básica
  • Estilos encapsulados

Melhorias Possíveis

  • Animações de entrada/saída
  • Fechamento com tecla ESC
  • Foco automático no conteúdo
  • Tipagem TypeScript
Fernando Cunha
Artigo deFernando Cunha

Com mais de 15 anos de experiência em tecnologia e formado pela FAAP em Administração de empresas, hoje é o CEO da Mestres da Web, empresa referência no mercado nacional e com projeções de expansão internacional.

últimos vídeos

veja nossos vídeos mais recentes e esteja por dentro de muitas novidades.

Au 02 - Front-end - React - Estrutura de projeto - Mestres BEGIN
play

Au 02 - Front-end - React - Estrutura de projeto - Mestres BEGIN

Explorando a estrutura gerada pelo Create React App, entendendo o papel das pastas public e src, os conceitos de Virtual DOM, JSX e componentes, além de como o CSS é aplicado nos projetos React.

Autor deste artigo
Fernando Cunha17/03/2025
Au 03 - Front-end - React - Criando layout da nossa aplicação - Mestres BEGIN
play

Au 03 - Front-end - React - Criando layout da nossa aplicação - Mestres BEGIN

Explorando a criação de um layout fixo para a aplicação React, com barra lateral, barra superior e área dinâmica para conteúdo. Utilizando o React Router Dom v6 para gerenciar navegação entre rotas.

Autor deste artigo
Fernando Cunha17/03/2025
Au 04 - Front-end - React - Estilizando o layout da aplicação - Mestres BEGIN
play

Au 04 - Front-end - React - Estilizando o layout da aplicação - Mestres BEGIN

Abordando técnicas para organizar estilos em React, utilizando seletores CSS, CSS Modules, integração com React Router, reset CSS eficiente e boas práticas para garantir consistência visual e manutenibilidade.

Autor deste artigo
Fernando Cunha17/03/2025