aquí es el número 0 que está completamente bien para serializar, pero es por eso que no puedes hacer cosas como poner nuevamente un manejador de clic en tu componente de cliente, porque si piensas en ello al final del día necesita ser serializado en este árbol de elementos para pasar por la red y no podemos hacer eso. Entonces, si quieres tener manejadores de clic, necesitan estar en el código fuente de el componente pero no en las props que están en ese árbol de elementos. Curiosamente, por supuesto, en el mundo de
React, los hijos son básicamente solo props. Al final del día, se serializan de una manera similar y esto es lo que nos permite hacer esta interesante técnica de anidar componentes de servidor dentro de componentes de cliente. Porque si piensas de nuevo en ese árbol de
React, tenemos nuestro marcador de posición aquí, esta referencia de cliente de
React para un componente de alerta con una prop de título, eso es todo serializable, y luego los hijos aquí es una llamada de createElement, por lo que es un elemento
html plano. Ahora, obviamente en la vida real en un proyecto real podría complicarse mucho más y podría tener componentes de servidor anidados, pero el punto clave aquí es que tenemos un componente de cliente cuyos hijos es el resultado de otro componente de servidor. Y para mí, creo que verlo como un problema de serialización me ayuda a entender el mecanismo de cómo puedo anidar componentes en el árbol de
React, pero no puedo hacerlo en el código fuente. Entonces, hay dos tipos de elementos con los que estamos lidiando aquí, el primero son los viejos elementos
html serializables, de nuevo, es como solo marcado estático de lo que estamos hablando, y luego para cualquier cosa más complicada que eso o interactiva tenemos instrucciones en el árbol de
React para resolver y renderizar componentes, y aquí es donde entra todo el concepto de componentes de cliente. Ahora, por supuesto, no escribes esto a mano, al igual que JSX que mostramos antes, esto está extendiendo JSX para poder hacer mucho más, de hecho, y aquí es donde entran los empaquetadores, todo el punto de usar empaquetadores es lidiar con este tipo de complejidad para nosotros, y entonces cuando como desarrollador pones una directiva use client en la parte superior de un archivo de componente de cliente, y luego en otro lugar de tu aplicación, en un contexto de servidor, estás importando este componente de contador, no obtienes una referencia a la función real, porque, de nuevo, no podemos poner eso en el árbol de
React, el contador en ese contexto se convierte automáticamente en este objeto que vimos antes, esta referencia de cliente con el ID de contador puesto allí para nosotros, y por supuesto, este ID necesita mapear a algo en el manifiesto, y eso también va a ser administrado para nosotros, esta generación de este objeto, de cómo mapeamos estos marcadores de posición en el árbol de
React a los componentes que van a ejecutarse en el cliente, todo esto se gestiona para nosotros. Debido a que necesitas esta integración con el
bundler, es por eso que existen estos paquetes de nombre largo existen, tienes el servidor de
React,
Webpack, VEET, estos existen para manejar las diferencias entre los diferentes empaquetadores para nosotros. Y por supuesto en la práctica, al igual que
SSR fue hace años cuando empezamos con
SSR, conectar esto en una aplicación real es complicado, y aquí es donde entran los
frameworks, por supuesto, es por eso que, de nuevo, hoy vas a optar por un
framework si quieres usar componentes de servidor hoy. Pero si alguien te pregunta, ¿qué son los componentes de servidor?, espero que como resultado de esta charla no solo vayas a decir, de nuevo, reorganizando las palabras que los componentes de servidor son componentes que solo se ejecutan en el servidor. Puedes decir algo como que los componentes de servidor son solo DOM virtual a través de la red. Puedes pensar en el hecho de que en última instancia RSC se trata de tener componentes serializables, tener árboles de elementos
React que podemos enviar a través de la red y con eso obviamente vienen algunas restricciones, pero cuando entiendes el mecanismo tiene más sentido. Lo que me gusta, como alguien que ha estado haciendo desarrollo web durante mucho tiempo en este punto, es que puedo pensar en ello de manera más primitiva como plantillas del lado del servidor con etiquetas de script, pero hecho de una manera que se siente más en casa en
React. De nuevo, acercándonos a ese mundo de lo mejor de el desarrollo web clásico y la mejora progresiva, pero con los beneficios del desarrollo moderno que he llegado a esperar con
React. No quiero restar importancia a la complejidad, la muy real complejidad que está en juego aquí, tanto en términos de la infraestructura, las herramientas, y lo que tienes que pensar como desarrollador, pero espero, lo que he hecho es darte un modelo mental simple para trabajar con él de modo que cuando vuelvas a tu trabajo y mires los componentes del servidor, tal vez por el primera vez, o tal vez has estado trabajando con él durante un tiempo, tienes un modelo mental simple para cómo funciona en la práctica y qué significan esos compromisos para ti en términos de tu aplicación.
Comments