Retour aux articles
jueves, 9 de enero de 202534 vues1

Comprender y Gestionar el Props Drilling en React: Guía Práctica

Mike Codeur

React
JavaScript

El Props Drilling: Una Profundización sobre el Paso de Props

El Props Drilling, que podría traducirse como "propagación de props", es una práctica en React donde los datos se pasan de componentes padres a componentes hijos, incluso cuando algunos componentes intermedios no necesitan esos datos. Esto puede convertirse rápidamente en un dolor de cabeza a medida que tu aplicación crece en complejidad. Este artículo explora este concepto y te muestra cómo gestionarlo eficazmente.

¿Qué es el Props Drilling?

Tomemos una aplicación sencilla donde necesitamos pasar un dato global, como siteName, a diferentes secciones: Header, Content y Footer.

Aquí tienes un ejemplo inicial:

JSX
function App() {
  const siteName = 'superdev.io';
  return (
    <>
      <h1>Bienvenido a {siteName}</h1>
      <div>Artículos del sitio: {siteName}</div>
      <div>Términos del sitio: {siteName}</div>
    </>
  );
}

Para estructurar el código, refactorizamos cada sección en componentes separados:

JSX
function Header({ siteName }) {
  return <h1>Bienvenido a {siteName}</h1>;
}

function Content({ siteName }) {
  return <div>Artículos del sitio: {siteName}</div>;
}

function Footer({ siteName }) {
  return <div>Términos del sitio: {siteName}</div>;
}

function App() {
  const siteName = 'superdev.io';
  return (
    <>
      <Header siteName={siteName} />
      <Content siteName={siteName} />
      <Footer siteName={siteName} />
    </>
  );
}

El Problema

Si un componente como Footer contiene subcomponentes (por ejemplo, Contact y CGV), tendrás que pasar siteName a través de cada subcomponente, incluso si no todos ellos necesitan este dato.

Ejemplo Extendido con Props Drilling

Imaginemos que el componente Footer contiene dos subcomponentes: Contact y CGV. Aquí está el código con la propagación de props:

JSX
function Header({ siteName }) {
  return <h1>Bienvenido a {siteName}</h1>;
}

function Content({ siteName }) {
  return <div>Artículos del sitio: {siteName}</div>;
}

function Footer({ siteName, email }) {
  return (
    <>
      <CGV siteName={siteName} />
      <Contact email={email} />
    </>
  );
}

function CGV({ siteName }) {
  return <div>Términos y condiciones: {siteName}</div>;
}

function Contact({ email }) {
  return <div>Contáctanos en: {email}</div>;
}

function App() {
  const siteName = 'superdev.io';
  const email = '[email protected]';
  return (
    <>
      <Header siteName={siteName} />
      <Content siteName={siteName} />
      <Footer siteName={siteName} email={email} />
    </>
  );
}

Límites del Props Drilling

El Props Drilling funciona bien en aplicaciones simples. Sin embargo, a medida que tu aplicación se vuelve más compleja, este enfoque se vuelve tedioso:

  • Los datos deben pasarse a través de componentes que no los necesitan.
  • El código se vuelve difícil de mantener y leer.

Afortunadamente, soluciones como Context API o bibliotecas de gestión de estado (Redux, Zustand, etc.) pueden resolver este problema.

💻 Ejercicio Práctico: Domina el Props Drilling

Problema: Agrega datos adicionales a una aplicación y pásalos a los componentes hijos.

Aquí tienes el código inicial:

JSX
function App() {
  const siteName = 'superdev.io';
  const email = '[email protected]';
  const nbMessages = 42;
  return (
    <>
      <Header siteName={siteName} nbMessages={nbMessages} />
      <Content siteName={siteName} />
      <Footer siteName={siteName} email={email} />
    </>
  );
}
  1. Crea un componente Header que muestre el nombre del sitio y el número de mensajes.
  2. Crea un componente Footer con dos subcomponentes: Contact y CGV.
  3. Pasa los datos necesarios a través de los props.

Ejemplo de Solución

Aquí tienes una solución posible:

JSX
function Header({ siteName, nbMessages }) {
  return (
    <div>
      <h1>Bienvenido a {siteName}</h1>
      <p>Tienes {nbMessages} mensajes sin leer.</p>
    </div>
  );
}

function Content({ siteName }) {
  return <div>Artículos disponibles en {siteName}</div>;
}

function Footer({ siteName, email }) {
  return (
    <div>
      <CGV siteName={siteName} />
      <Contact email={email} />
    </div>
  );
}

function CGV({ siteName }) {
  return <p>Términos y condiciones para {siteName}</p>;
}

function Contact({ email }) {
  return <p>Contáctanos en: {email}</p>;
}

function App() {
  const siteName = 'superdev.io';
  const email = '[email protected]';
  const nbMessages = 42;
  return (
    <>
      <Header siteName={siteName} nbMessages={nbMessages} />
      <Content siteName={siteName} />
      <Footer siteName={siteName} email={email} />
    </>
  );
}

En Resumen

El Props Drilling puede ser una solución eficaz para pasar datos en aplicaciones pequeñas. Sin embargo, en aplicaciones más complejas, se recomienda usar herramientas como Context API o bibliotecas de gestión de estado para mejorar la legibilidad y el mantenimiento del código.

Abonnes-toi à la NewsLetter

Apprends les meilleures pratiques pour devenir un développeur web moderne (JavaScript / React / Next).

Gagner sa vie grâce au code
Devenir développeur Freelance
+35 000 développeurs déjà inscrits.

Accès instantané. Aucune carte de crédit requise.

Rejoins +35 000 développeurs déjà inscrits.