spinny:~/writing $ less mastering-react-server-components.md
12React Server Components (RSC) han cambiado fundamentalmente la forma en que construimos aplicaciones React. Al mover la lógica de renderizado al servidor, podemos reducir significativamente el paquete de JavaScript enviado al cliente, lo que lleva a tiempos de carga más rápidos y mejores experiencias de usuario. En este artículo, exploraremos patrones avanzados y mejores prácticas para aprovechar los RSC en 2026.34## ¿Qué son los Server Components?56Tradicionalmente, los componentes de React se renderizaban completamente en el cliente (CSR) o se pre-renderizaban en el servidor como HTML (SSR) y luego se hidrataban en el cliente. Los **Server Components** nos permiten renderizar componentes _exclusivamente_ en el servidor. Su código nunca se envía al navegador.78### Los Beneficios9101. **Tamaño de Paquete Cero**: Las dependencias utilizadas en Server Components (como analizadores de markdown o bibliotecas de fechas pesadas) permanecen en el servidor.112. **Acceso Directo al Backend**: Puedes consultar tu base de datos directamente dentro de tu componente sin exponer puntos finales de API.123. **Code Splitting Automático**: Los componentes cliente importados del lado del servidor se dividen automáticamente.1314## Patrón de Obtención de Datos1516Con RSC, puedes hacer que tus componentes sean `async` y esperar datos directamente.1718```tsx19// app/users/page.tsx20import { db } from '@/lib/db';2122export default async function UsersPage() {23 const users = await db.user.findMany();2425 return (26 <main>27 <h1>Usuarios</h1>28 <ul>29 {users.map((user) => (30 <li key={user.id}>{user.name}</li>31 ))}32 </ul>33 </main>34 );35}36```3738### Suspense para Streaming3940Dado que la obtención de datos puede ser lenta, envuelve tus componentes en `<Suspense>` para mostrar una interfaz de usuario alternativa inmediatamente mientras se cargan los datos.4142```tsx43import { Suspense } from 'react';44import UserList from './UserList';45import LoadingSkeleton from './LoadingSkeleton';4647export default function Page() {48 return (49 <section>50 <h1>Mis Usuarios</h1>51 <Suspense fallback={<LoadingSkeleton />}>52 <UserList />53 </Suspense>54 </section>55 );56}57```5859## Combinando Server y Client Components6061Uno de los aspectos más confusos es cómo combinar componentes de Servidor y Cliente.6263**Regla de Oro**: Los Server Components pueden importar Client Components. Los Client Components _no pueden_ importar Server Components directamente. Sin embargo, puedes pasar un Server Component como `children` a un Client Component.6465### El Patrón "Children"6667```tsx68// ClientComponent.tsx69'use client';7071import { useState } from 'react';7273export default function ClientWrapper({ children }) {74 const [count, setCount] = useState(0);7576 return (77 <div onClick={() => setCount((c) => c + 1)}>78 Cuenta: {count}79 {children} {/* ¡Esto puede ser un Server Component! */}80 </div>81 );82}83```8485```tsx86// ServerPage.tsx87import ClientWrapper from './ClientWrapper';88import ServerContent from './ServerContent';8990export default function Page() {91 return (92 <ClientWrapper>93 <ServerContent /> {/* Esto funciona perfectamente */}94 </ClientWrapper>95 );96}97```9899## Errores Comunes1001011. **Usar Contexto en Server Components**: El Contexto es un concepto del lado del cliente. Si necesitas compartir datos del lado del servidor, pásalos como props o usa una caché especializada de alcance de solicitud.1022. **Agregar Controladores de Eventos**: No puedes agregar `onClick` u `onChange` a un Server Component. Esa lógica pertenece a un nodo hoja genérico de Client Component.103104## Conclusión105106React Server Components no son solo una característica; son un cambio de paradigma. Al comprender el límite entre servidor y cliente, puedes construir aplicaciones que sean altamente interactivas e increíblemente rápidas.107
:Dominando los React Server Components en 2026lines 1-107 (END) — press q to close