Lección 04. Diferencias entre Componentes de Servidor y de Cliente.

Antes de seguir con lecciones más avanzadas, debemos presentar un tema principal al momento de trabajar y aprender a utilizar Next.js.

Componentes Renderizados del lado del Servidor y Cliente.

¿Qué son los Componentes de Servidor y de Cliente en Next.js?_

Next.js introduce un enfoque híbrido entre renderizado en el servidor y en el cliente. Desde la versión 13 (con el nuevo sistema de rutas "App Router"), Next.js permite definir explícitamente si un componente debe ejecutarse en el servidor o en el cliente.

Componentes de Servidor (Server Components)._

¿Qué son?_

Ventajas._

Ejemplo de Componente de Servidor._

Copiar código
// Por defecto, todos los componentes son de servidor
export default function Producto() {
  const data = await fetchData(); // Se ejecuta en el servidor
  return <div>{data.nombre}</div>;
}

Nota: Explicaremos de mejor manera los componentes en lecciones posteriores.

Componentes de Cliente (Client Components)._

¿Qué son?_

Ejemplo de Componente de Cliente._

Copiar código
"use client"; // Este componente se ejecutará en el cliente

import { useState } from "react";

export default function BotonContador() {
  const [count, setCount] = useState(0);
  return <button onClick={() => setCount(count + 1)}>Contar: {count}</button>;
}

Nota: Para que Next.js entienda que un componente sea definido como Renderizado de Cliente, colocamos el leyend al principio: "use client", ya que los componentes de Next.js son definidos como de Servidor por default.

Diferencias Clave._

Resumiendo, definir Componentes de Servidor o de Cliente, depende de su funcionalidad y necesidades dentro de la App.

Integración entre diferentes tipos de componentes._

Es muy común usar componentes de servidor para la estructura general y componentes de cliente para partes interactivas. Por ejemplo:

Copiar código
// layout.tsx (Componente de Servidor)
import BotonContador from './BotonContador';

export default function Page() {
  const data = await fetchData();
  return (
    <div>
      <h1>{data.title}</h1>
      <BotonContador /> {/* Componente de Cliente */}
    </div>
  );
}

Buenas prácticas._