Construcción de IU con Componentes

Conceptos básicos de React

Existen tres conceptos fundamentales de React que necesitarás conocer para comenzar a construir aplicaciones con React. Estos son:

  • Componentes
  • Props (Propiedades)
  • Estado (State)

En los próximos capítulos, revisaremos estos conceptos y proporcionaremos recursos donde podrás seguir aprendiendo. Una vez que estés familiarizado con estos conceptos, te mostraremos cómo instalar Next.js y utilizar características más recientes de React como los Componentes de Servidor y Cliente.

Componentes

Las interfaces de usuario pueden descomponerse en bloques más pequeños llamados componentes.

Los componentes te permiten construir fragmentos de código autocontenidos y reutilizables. Si piensas en los componentes como piezas de LEGO, puedes tomar estos bloques individuales y combinarlos para formar estructuras más grandes. Si necesitas actualizar una parte de la interfaz, puedes modificar el componente o bloque específico.

Ejemplo de un Componente de Medios compuesto por 3 componentes más pequeños: imagen, texto y botón

Esta modularidad permite que tu código sea más mantenible a medida que crece, ya que puedes añadir, actualizar y eliminar componentes sin afectar el resto de la aplicación.

Lo bueno de los componentes de React es que son simplemente JavaScript. Veamos cómo puedes escribir un componente de React desde una perspectiva de JavaScript:

Creación de componentes

En React, los componentes son funciones. Dentro de tu etiqueta script, crea una nueva función llamada header:

index.html
<script type="text/jsx">
  const app = document.getElementById("app")
 
  function header() {
  }
 
  const root = ReactDOM.createRoot(app);
  root.render(<h1>Develop. Preview. Ship.</h1>);
</script>

Un componente es una función que devuelve elementos de interfaz de usuario. Dentro de la declaración return de la función, puedes escribir JSX:

index.html
<script type="text/jsx">
  const app = document.getElementById("app")
 
  function header() {
     return (<h1>Develop. Preview. Ship.</h1>)
   }
 
  const root = ReactDOM.createRoot(app);
  root.render(<h1>Develop. Preview. Ship.</h1>);
</script>

Para renderizar este componente en el DOM, pásalo como primer argumento en el método root.render():

index.html
<script type="text/jsx">
  const app = document.getElementById("app")
 
  function header() {
     return (<h1>Develop. Preview. Ship.</h1>)
   }
 
  const root = ReactDOM.createRoot(app);
  root.render(header);
</script>

Pero, espera un momento. Si intentas ejecutar el código anterior en tu navegador, obtendrás un error. Para que funcione, hay dos cosas que debes hacer:

Primero, los componentes de React deben escribirse con mayúscula inicial para distinguirlos del HTML y JavaScript convencional:

index.html
function Header() {
  return <h1>Develop. Preview. Ship.</h1>;
}
 
const root = ReactDOM.createRoot(app);
// Capitaliza el Componente de React
root.render(Header);

Segundo, usas los componentes de React de la misma manera que usarías etiquetas HTML normales, con corchetes angulares <>:

index.html
function Header() {
  return <h1>Develop. Preview. Ship.</h1>;
}
 
const root = ReactDOM.createRoot(app);
root.render(<Header />);

Si intentas ejecutar el código en tu navegador nuevamente, verás los cambios.

Anidación de componentes

Las aplicaciones suelen incluir más contenido que un solo componente. Puedes anidar componentes de React dentro de otros como lo harías con elementos HTML normales.

En tu ejemplo, crea un nuevo componente llamado HomePage:

index.html
function Header() {
  return <h1>Develop. Preview. Ship.</h1>;
}
 
function HomePage() {
  return <div></div>;
}
 
const root = ReactDOM.createRoot(app);
root.render(<Header />);

Luego anida el componente <Header> dentro del nuevo componente <HomePage>:

index.html
function Header() {
  return <h1>Develop. Preview. Ship.</h1>;
}
 
function HomePage() {
  return (
    <div>
      {/* Anidando el componente Header */}
      <Header />
    </div>
  );
}
 
const root = ReactDOM.createRoot(app);
root.render(<Header />);

Árbol de componentes

Puedes seguir anidando componentes de React de esta manera para formar árboles de componentes.

Árbol de componentes mostrando cómo pueden anidarse unos dentro de otros

Por ejemplo, tu componente principal HomePage podría contener un Header, un Article y un Footer. Y cada uno de esos componentes podría a su vez tener sus propios componentes hijos, y así sucesivamente. Por ejemplo, el componente Header podría contener un Logo, un Title y un Navigation.

Este formato modular te permite reutilizar componentes en diferentes partes de tu aplicación.

En tu proyecto, dado que <HomePage> es ahora tu componente principal, puedes pasarlo al método root.render():

index.html
function Header() {
  return <h1>Develop. Preview. Ship.</h1>;
}
 
function HomePage() {
  return (
    <div>
      <Header />
    </div>
  );
}
 
const root = ReactDOM.createRoot(app);
root.render(<HomePage />);

Recursos adicionales: