Eso fueron los componentes de servidor de React. Cuando combinas los componentes de servidor de React con suspense y la transmisión, ahora tenemos las primitivas o los bloques de construcción para abordar algunas desventajas de las aplicaciones de múltiples páginas o las aplicaciones renderizadas en el servidor mientras mantenemos la misma experiencia de usuario que amamos de las aplicaciones de una sola página o las aplicaciones del lado del cliente.
Pero hay una última pieza para el rompecabezas. Y en los últimos meses, el equipo de Next.js ha estado considerando esto. Si necesitamos ir al servidor para hacer un viaje para la obtención de datos y ahora vamos al servidor para hacer la renderización con los componentes de servidor de React, ¿podríamos también hacer el enrutamiento en el servidor? ¿Podríamos permitir a los desarrolladores construir aplicaciones donde el enrutamiento, la renderización y la obtención de datos suceden donde tiene más sentido? ¿Y podríamos darles convenciones que son fáciles de entender pero también les permiten mover partes de su aplicación ya sea al cliente o al servidor?
Así que hace unas semanas, compartimos un RFC. Y en este RFC, propusimos un nuevo enrutador para Next.js. Y este nuevo enrutador se basa en los componentes de React y las características de React 18. Hay muchos más detalles en el RFC y no entraré demasiado en los detalles de implementación. Si tienes curiosidad por saber más al respecto, te recomiendo que lo leas. Pero por ahora, permíteme compartir contigo algo que me emociona mucho y en lo que hemos estado trabajando.
Así que, si lo piensas, con los componentes de servidor de React, podemos entrelazar componentes de cliente y de servidor en un árbol. Esto significa que en una página o una ruta, podrías potencialmente tener tanto componentes de cliente como de servidor. Así que, con este nuevo modelo, se vuelve cada vez más importante dividir nuestras rutas en fragmentos independientes a los que llamamos segmentos de ruta. Estos segmentos de ruta, se mapean a un término ya existente, los segmentos de URL. Aunque estamos dividiendo las rutas, queremos mantener el enrutamiento del sistema de archivos porque generalmente tiende a ser una forma más intuitiva para los desarrolladores de definir sus rutas. Y dividir las rutas de esta manera, o como lo llamamos, hacer enrutamiento anidado, tiene tres beneficios principales.
El primero es que somos capaces de crear diseños, y los diseños han sido una petición muy antigua de la comunidad. Y la forma en que queremos definir los diseños es que un diseño es una interfaz de usuario que se comparte entre rutas, y estos diseños, no deberían re-renderizarse o perder estado en la navegación. También significa que los componentes que no cambian dentro de una ruta, como un diseño, también queremos asegurarnos de que sigan siendo interactivos a medida que el usuario navega entre rutas. En segundo lugar, si lo combinamos con componentes de servidor, eso significa que en la navegación, el servidor solo tiene que buscar y renderizar los segmentos que han cambiado, y no tenemos que re-renderizar todo el subárbol para esa ruta. Y en tercer lugar, podemos tener un control más granular sobre la obtención de datos. Así que en Next.js, como quizás sepas, actualmente obtenemos datos en el nivel de página, y con este nuevo modelo podemos obtener datos en el nivel de segmento. Y dado que ya hemos movido la obtención de datos fuera del código de renderización o fuera de los componentes, lo que podemos hacer ahora es iniciar ansiosamente esas solicitudes en paralelo. Y esto reduce lo que algunos de ustedes pueden conocer, que son las cascadas. Y en general, la cantidad de tiempo que se necesita para cargar el contenido de una ruta también se reduce.
Así que al construir una nueva ruta con los componentes de servidor de React, somos capaces de lograr tres cosas. Reducir la cantidad de código que enviamos al cliente, reducir la cantidad de trabajo que tiene que hacer el servidor, y también reducir la cantidad de tiempo que se necesita para hacer ese trabajo. Ahora, si lo combinamos con características concurrentes, como la transición, el suspense, y la característica del componente fuera de pantalla, podemos simplificar la creación de estados de carga y mejorar la experiencia de navegación. Por ejemplo, si quieres usar el enrutamiento del lado del cliente y estás obteniendo datos mientras renderizas, puedes tener demasiados estados de carga escalonados o spinners. Así que, realmente, lo que quieres hacer como desarrollador es consolidar ellos en indicadores de carga más significativos.
Comments