Mi nombre es Aurora. Trabajo en el equipo de Next.js en Brasil. Y React Server Components llegó hace unos años. Ha sido todo un viaje. Algunos de ustedes han lanzado aplicaciones de enrutador de aplicaciones con ellos. Algunos de ustedes tal vez los probaron, se retiraron, volvieron a los patrones que ya funcionaban para ustedes, y algunos de ustedes tal vez solo han estado observando desde la línea lateral. Así que esperando ver a dónde va esto. Pero donde sea que estén con ellos, el modelo ha avanzado mucho. Y quiero mostrarles lo que React Server Components puede hacer en Next.js hoy y por qué creo que es el momento más interesante para construir en la web.
Pero antes de hablar sobre Next.js, hablemos sobre React. La historia comienza con algo que ya amamos de React. ¿Por qué amamos React? Puede que no lo hayas pensado realmente o articulado por qué, pero lo sientes cada vez que escribes un componente. React es componible. Puedes construir una fila, una lista de reproducción, una página, unirlas y simplemente funcionan. Así que aquí hay una página con un puñado de componentes de características compuestos juntos. Los componentes de React pueden ser autónomos. Una página diferente puede reutilizar algunas de las mismas piezas mezcladas con nuevas para lo que la página necesita. React nos da límites claros. En otro lugar, los mismos componentes reaparecen, reordenados en otro orden. No tuvimos que saber qué había dentro de cada uno. Así que esa composibilidad es lo que queremos mantener. Todo lo demás en la pila tiene que ganarse su lugar alrededor de eso.
Ahora, los componentes tienen límites claros, entradas claras, salidas claras. Esa es la misma propiedad que hace que un componente sea fácil de razonar para nosotros, también lo hace manejable para un agente. Así que un agente puede tomar una pieza, cambiarla y no tener que entender toda la aplicación para hacerlo de manera segura. Cuanto más grande se vuelve la base de código, más importa eso para el agente, para ti y para tus compañeros de equipo. Y esto no es solo cierto a nivel de componente. La gente está notando esto en la forma de toda la base de código. Así que este es Antonio. Puede que hayas visto su YouTube code with Antonio. Fue genial. Fue como mi camino cuando estaba aprendiendo AppRouter en su día. Pero ha estado construyendo aplicaciones reales con agentes, y lo que también sigue encontrando es este pequeño radio de explosión y límites claros. Así que esta es la misma propiedad, solo escalada al nivel de la base de código. Tal vez eso significaría una carpeta de características en lugar de solo pensar en componentes individuales. Pero ¿cómo se ve todo esto en la práctica cuando comienzas a construir? En el momento en que agregamos datos, la composibilidad se pone bajo presión. Algunos enfoques la mantienen y pagan por ello en otro lugar, y algunos simplemente pierden la composibilidad por completo. Así que vamos a recorrer lo que hemos intentado. Comenzamos con useEffect, nuestro favorito. El componente puede buscar en el renderizado, poseer su bandera de carga, posee la bandera de error y ejecuta la solicitud dentro de useEffect con el arreglo de dependencias correcto. ¿Olvidas una dependencia y obtienes datos obsoletos o agregas una de más y comienzas a buscar en un bucle? Así que por sí solo, se ve bien. Tenemos un componente aquí, top boundary grid, está poseyendo sus datos. Pero luego, en el momento en que otro componente necesita los mismos datos, no podemos simplemente soltar esto dos veces porque ahora estaríamos haciendo la misma búsqueda dos veces. Así que lo elevamos a un componente padre, lo pasamos a través de props, y de repente este componente ya no posee sus datos. Comienza a agregar mutaciones, tienes que elevarlo más alto para ejecutar esos cambios de estado, y de repente tu componente autónomo está conectado a través de tres niveles de props por razones que no tienen nada que ver con la estructura de la interfaz de usuario. Surgió toda una categoría de bibliotecas para limpiar esto. Tuvimos React Query, SWIR, Apollo, Relay. Así que aquí los datos en su lugar estarían claveados y almacenados en caché centralmente para que cualquier componente pueda pedirlos sin perforar props, y las mutaciones pueden invalidar desde cualquier lugar. Y este fue un paso genuino hacia adelante. Y estas bibliotecas siguen siendo una gran opción para muchas aplicaciones hoy en día.
Comments