¿Qué son los React Portals?

Clase 24 de 34Curso de React.js

Resumen

¿Qué son los React Portals y cómo funcionan?

React Portals es una poderosa herramienta que ofrece React para mover componentes entre diferentes nodos de HTML, casi como si de magia se tratara. Imagina que tienes un componente que deseas renderizar en un lugar completamente distinto, fuera del flujo DOM principal de tu aplicación. Los Portals te permiten hacer justamente eso: teletransportar componentes entre nodos, manteniendo la estructura del componente principal. Esto resulta especialmente útil cuando se maneja contenido dinámico como modales o tooltips, donde el UI necesita aparecer fuera del contenedor principal.

¿Cómo se implementan los Portals en un proyecto React?

Para implementar Portals en un proyecto React primero se debe crear un nodo HTML adicional en el archivo index.html. Este nodo será el destino al que se teletransportará el contenido del componente. La implementación típica requiere las siguientes acciones:

  1. Crear el nodo en HTML: Añadir un div con un ID único al archivo index.html. Por ejemplo <div id="modal"></div>.
  2. Uso de react-dom.createPortal: Dentro del componente, usar react-dom.createPortal para definir qué contenido será teletransportado y a qué nodo HTML.
import ReactDOM from 'react-dom';

function Modal({ children }) {
  return ReactDOM.createPortal(
    <div className="modal">
      {children}
    </div>,
    document.getElementById('modal')
  );
}

¿Cómo controlar la visibilidad de un modal con estado?

Para controlar cuándo un modal debe estar visible se puede usar un estado en React, por ejemplo openModal. El modal solo debe renderizarse cuando este estado sea true. Se puede lograr lo siguiente:

  • Crear un estado openModal:

    const [openModal, setOpenModal] = React.useState(false);
    
  • Renderizar condicionalmente el modal:

    {openModal && <Modal>Contenido del modal</Modal>}
    
  • Usar un botón o evento para alternar el estado openModal:

    <button onClick={() => setOpenModal(!openModal)}>Toggle Modal</button>
    

¿Cómo hacer el estilo del modal más atractivo?

Un modal bien diseñado puede mejorar significativamente la experiencia del usuario. Aquí algunas sugerencias para estilizar un modal usando CSS:

  • Cobertura completa: Hacer que el modal abarque toda la pantalla usando CSS con position: fixed, top: 0, left: 0, width: 100% y height: 100%.
  • Fondo translúcido: Usar un color de fondo con transparencia para resaltar el contenido del modal y crear un efecto de desenfoque del fondo.
  • Centro del contenido: Centrar el contenido del modal vertical y horizontalmente para mejor accesibilidad usando flexbox.

Ejemplo de CSS:

.modal {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
  align-items: center;
}

Conclusión

Implementar Portals en React para crear modales y otros componentes de UI dinámicos es una táctica beneficiosa que maneja eficientemente la renderización de componentes fuera del DOM principal. Usar estados para controlar la visibilidad y CSS para el estilo asegura que estos elementos no solo funcionen bien, sino que también se vean bien. Anímate a utilizar estos conceptos en tu próximo proyecto, ¡transforma y mejora la experiencia de tus usuarios!