Contents

Portais React: Expanda sua caixa de ferramentas para além do Prop Drilling

Principais lições

Os portais React oferecem a capacidade de exibir o conteúdo de um componente além de sua estrutura hierárquica parental, o que é particularmente vantajoso para componentes da interface do usuário, como janelas pop-up e sobreposições.

Os portais oferecem uma abordagem versátil para renderizar interfaces de utilizador, acomodando vários casos de utilização, incluindo janelas modais, integrações de terceiros, menus de contexto e dicas de ferramentas. Estes componentes foram concebidos para se adaptarem perfeitamente a vários pontos do Document Object Model (DOM), garantindo flexibilidade na sua colocação.

Os portais React oferecem uma solução conveniente para desacoplar considerações sobre a interface do utilizador (IU) da hierarquia de componentes primários, promovendo assim uma melhor manutenção do código e facilitando a gestão eficiente do posicionamento do eixo z dos componentes, permitindo aos programadores organizar e empilhar eficazmente os elementos da IU com facilidade.

As aplicações Web modernas necessitam de componentes da interface do utilizador, como modais e dicas de ferramentas, embora possam não se alinhar perfeitamente com os componentes estruturais pré-existentes do design de um sítio Web.

O React fornece uma solução elegante para a questão da renderização de componentes em várias janelas ou em diferentes domínios, utilizando a sua inovadora funcionalidade Portal, que permite uma integração perfeita com conteúdo externo, mantendo o controlo total sobre a interface de utilizador e o comportamento da aplicação.

O que são portais React?

Os portais React oferecem um meio pelo qual é possível exibir o conteúdo de um componente além dos limites de sua árvore de componentes pai. Em outras palavras, eles facilitam a renderização do resultado de um componente dentro de um nó DOM alternativo que não pertence ao componente atual.

Esta funcionalidade revela-se particularmente vantajosa quando se trata de elementos da interface do utilizador que têm de ser apresentados numa posição mais elevada no Modelo de Objeto de Documento (DOM), como janelas pop-up ou conteúdo em camadas.

/pt/images/illustration-of-react-portals-1.jpg

Usos para portais React

Os portais React são versáteis e podem ser utilizados de forma eficaz em várias situações diferentes, fornecendo flexibilidade e conveniência para os desenvolvedores na criação de aplicativos Web.

Considerando a importância de modais e sobreposições no design da interface do usuário, é recomendável posicioná-los diretamente na hierarquia primária do Modelo de Objeto de Documento (DOM) para uma apresentação visual ideal. Ao fazer isso, quaisquer restrições impostas por um elemento pai nesses elementos serão minimizadas, permitindo uma renderização sem restrições de diálogos modais e sobreposições.

Considerando a integração de bibliotecas externas, é importante ter em conta os casos em que essas bibliotecas esperam ocupar posições pré-determinadas no Modelo de Objeto do Documento (DOM).

A criação de menus de contexto que respondem às interacções do utilizador e têm de estar situados em relação à janela de visualização ou a um elemento DOM específico constitui um desafio interessante.

As dicas de ferramentas e os popovers são uma caraterística comum utilizada para fornecer informações adicionais sobre um elemento quando se passa o rato por cima dele ou se clica nele. No entanto, por vezes, estas dicas de ferramentas e popovers têm de ser apresentadas por cima de outros elementos, mesmo que esses elementos estejam localizados mais abaixo na hierarquia de componentes. Isso pode representar um desafio para os desenvolvedores que precisam garantir que a dica de ferramenta ou popover permaneça visível apesar de ser obscurecida por outros componentes. Para resolver esse problema, o React Native fornece suporte para renderizar dicas de ferramentas e popovers diretamente na superfície da tela usando visualizações nativas, em vez de depender apenas de visualizações virtuais criadas dentro do framework. Ao fazer isso, os desenvolvedores podem criar dicas de ferramentas e popovers que permanecem visíveis o tempo todo, independentemente do estado dos componentes ao redor.

Como funcionam os portais React

Os componentes React são normalmente renderizados anexando sua saída ao nó DOM do componente pai, o que é adequado para muitas situações. No entanto, essa abordagem pode ser restritiva quando se tenta exibir conteúdo que existe além dos limites hierárquicos do componente pai.

Ao construir uma caixa de diálogo modal, é habitual incorporar o seu conteúdo no elemento DOM do componente principal por predefinição.

A utilização de diálogos modais pode ter consequências indesejadas, tais como estilos contraditórios e limitações do seu conteúdo devido à herança dos elementos circundantes.

Os portais React aliviam essa restrição permitindo a especificação de um nó DOM designado para o qual a renderização de um componente é delegada.

Utilizando o Shadow DOM, é possível encapsular qualquer componente da interface do utilizador para além dos limites da árvore dom do elemento principal, libertando-o assim das limitações impostas pelo estilo e estrutura do elemento principal.

Como usar portais React

Os portais React servem como uma instância ilustrativa de um cenário em que os modais podem ser utilizados de forma eficaz. O código fornecido demonstra o processo envolvido.

Configurar um aplicativo React básico

Para estabelecer um portal, é imperativo que um aplicativo React fundamental seja configurado adequadamente como base.É possível utilizar recursos como o Create React App para construir rapidamente um projeto com o mínimo de esforço.

/pt/images/illustration-of-a-react-app-folder-structure-after-initialization.jpg

Criar um portal para modais

Para construir um portal da Web usando o React, utilize o método ReactDOM.createPortal(), que aceita dois parâmetros: o conteúdo desejado a ser exibido no portal e um ponto de referência para a parte específica do Modelo de Objeto de Documento (DOM) em que o conteúdo deve ser renderizado.

O componente Modal utiliza um portal para apresentar a sua descendência no elemento HTML que possui o identificador ‘root’.

 // Modal.js
import ReactDOM from "react-dom";

const Modal = ({ children }) => {
  const modalRoot = document.getElementById("root");
  return ReactDOM.createPortal(children, modalRoot);
};

export default Modal;

Essencialmente, é possível delinear os pormenores englobados num Modal designado dentro de um componente singular. De facto, considere o exemplo subsequente em que o elemento ModalContent inclui tanto uma epístola como um mecanismo de fecho Concordat:

 // Create a Modal Content Component
const ModalContent = ({ onClose }) => (
  <div className="modal">
    <div className="modal-content">
      <p>This is a modal content.</p>
      <button onClick={onClose}>Close</button>
    </div>
  </div>
);

export default ModalContent; 

Ao clicar no botão designado no ficheiro App.js, pode aceder ao componente Modal para mais interação e funcionalidade.

 // Usage in App component
import { useState } from "react";
import Modal from "./Modal";
import ModalContent from "./ModalContent";
import "./App.css";

const App = () => {
  const [isModalOpen, setIsModalOpen] = useState(false);

  const toggleModal = () => {
    setIsModalOpen(!isModalOpen);
  };

  return (
    <div>
      <button onClick={toggleModal}>Open Modal</button>
      {isModalOpen && (
        <Modal>
          <ModalContent onClose={toggleModal} />
        </Modal>
      )}
    </div>
  );
};

export default App;

O componente Modal está isolado da estrutura do componente principal e utiliza um gateway auxiliar para apresentar o seu conteúdo na interface.

O seu browser não suporta a etiqueta de vídeo.

Exemplos do mundo real

Os portais React possuem versatilidade e aplicabilidade em diversos cenários diários, tornando-os uma ferramenta indispensável para navegar na vida moderna.

Ao desenvolver um sistema de notificação, é comum desejar que as mensagens sejam apresentadas de forma proeminente no topo da interface do utilizador, independentemente da posição ou localização de outros componentes no ecrã. Isto pode ser conseguido através de várias técnicas de conceção e desenvolvimento, como a utilização de cabeçalhos fixos ou a colocação de notificações numa área dedicada que permaneça sempre visível. Além disso, a utilização de layouts responsivos e consultas multimédia pode garantir que as notificações são apresentadas corretamente em diferentes dispositivos e tamanhos de ecrã, melhorando a usabilidade e acessibilidade gerais da aplicação.

O menu de contexto deve ser posicionado perto do ponto em que o utilizador o selecciona, independentemente da sua localização na estrutura hierárquica do Modelo de Objeto de Documento (DOM).

As integrações de terceiros requerem frequentemente acesso a secções específicas do Modelo de Objeto de Documento (DOM) que não são diretamente acessíveis pela própria biblioteca.

Práticas recomendadas para uso do portal

Para maximizar a utilidade dos portais React, considere aderir às seguintes recomendações:

A utilização ideal da tecnologia de portal depende do discernimento em relação à sua aplicabilidade. Embora estes portais apresentem um elevado grau de adaptabilidade, podem não ser universalmente necessários em todas as situações. É prudente utilizar portais apenas quando a apresentação convencional apresenta desafios intransponíveis ou interfere com outros elementos.

Para manter a integridade do conteúdo do portal, é essencial que esse conteúdo seja apresentado de forma independente e não dependa de factores externos, como os estilos dos pais ou o contexto circundante.

Na gestão de eventos e acções em ambientes de portal, é importante ter em conta as características únicas dos conteúdos destacados. Isto implica tratar eficazmente a propagação de eventos e assegurar a gestão adequada das acções associadas.

Benefícios dos portais React

Os portais React oferecem uma série de vantagens que podem melhorar a criação de interfaces de usuário complexas, incluindo:

Ao segregar as preocupações com a interface do utilizador (IU) da hierarquia de componentes primários, esta abordagem melhora a manutenção e a legibilidade do código.

Proporciona um grau de adaptabilidade a elementos que requerem exibição para além dos limites do seu elemento principal.

A proposta sugere a implementação de um sistema para gerar sem esforço janelas modais e elementos de sobreposição, que podem ser destacados do design principal da interface do utilizador.

Com a nossa poderosa ferramenta, tem a capacidade de gerir sem esforço a ordenação em profundidade dos componentes, permitindo uma disposição limpa e organizada dos elementos da sua interface de utilizador.

Possíveis armadilhas e considerações

Embora a utilização de portais React possa ser vantajosa, é importante considerar vários fatores:

Devido à sua natureza única, os portais são conhecidos por produzir consequências estilísticas imprevistas no CSS. Isso ocorre porque eles posicionam o conteúdo além dos limites do elemento pai. Para mitigar este problema, pode ser prudente empregar estilos globais ou ter cuidado ao gerir o âmbito dos elementos CSS no contexto do portal.

Para garantir que o seu portal permanece acessível a todos os utilizadores, é importante manter as características essenciais de acessibilidade, tais como o suporte para navegação por teclado e a compatibilidade com leitores de ecrã ao apresentar conteúdos através do referido portal.

A Renderização do Lado do Servidor (SSR) pode apresentar desafios na integração de portais devido à sua dependência de tecnologias do lado do cliente, como o JavaScript ou as tomadas Web, que não estão disponíveis durante a resposta inicial do servidor. Como resultado, todo o potencial das funcionalidades do portal pode ser limitado num ambiente SSR. No entanto, é possível mitigar estes problemas através da implementação de soluções alternativas ou abordagens alternativas que aproveitem o conteúdo renderizado pelo servidor, proporcionando simultaneamente uma experiência de utilizador rica. É essencial considerar cuidadosamente os compromissos entre as capacidades dos SSR e a funcionalidade do portal para tomar decisões informadas sobre a sua integração.

Impulsionando a interface do usuário além da norma

Os portais React fornecem um método elegante e eficiente para lidar com cenários complexos de interface do usuário em que o conteúdo precisa se estender além dos limites das dimensões de seu componente pai.

Através da utilização da tecnologia de portal e da adesão a metodologias estabelecidas, é possível construir interfaces de utilizador que exibem um maior grau de flexibilidade e facilitam a manutenção, evitando assim potenciais complicações.

Os portais React oferecem uma solução robusta para satisfazer requisitos complexos de interface de utilizador através da utilização da criação de modais e da integração com bibliotecas externas.