Server Components y Client Components
En App Router, los componentes son Server Components por defecto. Solo necesitas Client Components cuando hay interactividad de navegador.
Server Component
tsx
export default async function ProductsPage() {
const products = await getProducts()
return <ProductsList products={products} />
}Puede:
- Leer datos en servidor.
- Acceder a base de datos o servicios internos.
- Reducir JavaScript enviado al cliente.
Client Component
tsx
"use client"
export function Counter() {
const [count, setCount] = useState(0)
return <button onClick={() => setCount(count + 1)}>{count}</button>
}Necesario para:
useStateuseEffect- Eventos de navegador.
- APIs del navegador.
- Librerias que requieren DOM.
Frontera servidor-cliente
Puedes pasar datos serializables de Server a Client Component.
tsx
<ProductFilters initialSearch={search} />No pases funciones, conexiones o clases no serializables.
Patrón recomendado
txt
page.server -> obtiene datos
client component -> interaccion localBuenas practicas
- Empieza con Server Components.
- Añade
"use client"solo donde haga falta. - Mantén Client Components pequeños.
- No expongas secretos al cliente.
- Evita proveedores globales client si solo una zona los necesita.
