Skip to content

Componentes y Composición en React ​

La composición es una de las técnicas fundamentales en React que permite construir interfaces de usuario complejas a partir de componentes más pequeños y reutilizables. Gracias a esta característica, React fomenta la modularidad y el mantenimiento eficiente del código.


¿Qué es la composición de componentes? ​

La composición en React se refiere al proceso de combinar componentes para formar interfaces más complejas. En lugar de heredar comportamiento y estilo, React utiliza la composición para pasar datos y reutilizar lógica entre componentes.

Ejemplo básico ​

jsx
function Header() {
  return <header>Encabezado</header>;
}

function Footer() {
  return <footer>Pie de página</footer>;
}

function App() {
  return (
    <div>
      <Header />
      <main>Contenido principal</main>
      <Footer />
    </div>
  );
}

Comunicación entre componentes ​

La comunicación entre componentes se realiza principalmente mediante props, que permiten pasar datos desde un componente padre hacia uno o más componentes hijos.

De padre a hijo (vía props) ​

jsx
function Greeting({ name }) {
  return <h1>Hola, {name}</h1>;
}

function App() {
  return <Greeting name="Juan" />;
}

De hijo a padre (con callbacks) ​

En este caso, el componente hijo llama a una función pasada como prop desde el padre.

jsx
function Button({ onClick }) {
  return <button onClick={() => onClick("Mensaje del hijo")}>Haz clic</button>;
}

function App() {
  const handleClick = (message) => alert(message);

  return <Button onClick={handleClick} />;
}

Prop especial children ​

La prop children permite a los componentes envolver contenido arbitrario, lo que los hace más flexibles y reutilizables.

Ejemplo ​

jsx
function Card({ children }) {
  return <div className="card">{children}</div>;
}

function App() {
  return (
    <Card>
      <h1>Título de la tarjeta</h1>
      <p>Contenido de la tarjeta</p>
    </Card>
  );
}

Patrón Render Props ​

El patrón Render Props consiste en pasar una función como prop que devuelve elementos React. Es útil para compartir lógica entre componentes.

Ejemplo ​

jsx
function DataFetcher({ render }) {
  const data = ["Elemento 1", "Elemento 2", "Elemento 3"];

  return <div>{render(data)}</div>;
}

function App() {
  return (
    <DataFetcher
      render={(data) => (
        <ul>
          {data.map((item, index) => (
            <li key={index}>{item}</li>
          ))}
        </ul>
      )}
    />
  );
}

Componentes de Orden Superior (HOC) ​

Un Componente de Orden Superior (HOC, por sus siglas en inglés) es una función que toma un componente como argumento y devuelve un nuevo componente. Los HOC permiten reutilizar lógica entre múltiples componentes.

Ejemplo ​

jsx
function withLogger(Component) {
  return function WrappedComponent(props) {
    console.log("Props: ", props);
    return <Component {...props} />;
  };
}

function Hello({ name }) {
  return <h1>Hola, {name}</h1>;
}

const HelloWithLogger = withLogger(Hello);

function App() {
  return <HelloWithLogger name="Juan" />;
}

Composición vs. Herencia ​

React fomenta la composición en lugar de la herencia para compartir código y lógica. La composición es más flexible y se alinea mejor con el diseño basado en componentes de React.

Ejemplo práctico ​

En lugar de usar herencia para personalizar un botón:

jsx
function Button({ children, color }) {
  return <button style={{ backgroundColor: color }}>{children}</button>;
}

function App() {
  return <Button color="blue">Haz clic</Button>;
}

Conclusiones ​

La composición es una de las características clave que hace que React sea tan poderoso. Al dividir la interfaz en componentes pequeños y combinarlos de manera eficiente, puedes crear aplicaciones modulares, mantenibles y escalables. Dominar la composición te permitirá aprovechar al máximo el potencial de React.