React Server Components (RSC) son un paradigma de componentes de React que se ejecutan exclusivamente en el servidor, antes de que la página se envíe al cliente. A diferencia del Server-Side Rendering (SSR) tradicional, que renderiza la aplicación completa en el servidor y luego la hidrata en el cliente, los RSC operan a un nivel de granularidad de componente. Esto significa que pueden acceder directamente a bases de datos, sistemas de archivos o APIs internas sin exponer credenciales al cliente, y el JavaScript resultante enviado al navegador es significativamente menor, ya que solo se envían los componentes interactivos ('Client Components') y una representación serializada de los componentes del servidor.

La implementación más prominente de React Server Components se encuentra en Next.js 13 y versiones posteriores, a través de su 'App Router'. En este framework, los componentes son RSC por defecto, a menos que se marquen explícitamente con la directiva 'use client'. Esto permite a los desarrolladores construir aplicaciones donde la lógica de fetching de datos y la renderización inicial de UI se realizan completamente en el servidor, optimizando la carga inicial y la experiencia del usuario. Otros frameworks y librerías del ecosistema React están explorando o integrando conceptos similares para mejorar la eficiencia del lado del servidor.

Para un arquitecto, React Server Components son cruciales porque alteran fundamentalmente el modelo de programación y los trade-offs en el desarrollo de aplicaciones web. Permiten mover gran parte de la lógica de negocio y acceso a datos del cliente al servidor, mejorando la seguridad (no se exponen credenciales), la performance (menos JS en el cliente, menos round-trips API) y la experiencia del desarrollador (colocación de datos y UI más cercana). Sin embargo, introducen complejidades en la gestión del estado global y la interactividad, ya que el estado del cliente y del servidor deben coordinarse. La decisión de adoptar RSC implica evaluar la arquitectura de la aplicación, la necesidad de optimización de carga inicial, la seguridad de los datos y la capacidad del equipo para manejar el nuevo modelo de componentes distribuidos, sopesando los beneficios de rendimiento y seguridad contra la posible complejidad en la interactividad y el estado.