Matt Pocock no está aquí, así que estamos bien. Entonces, esto es ahora oficialmente un componente del servidor, conceptualmente. ¿Cuál es el problema? React no puede renderizar promesas. Y cualquier cosa asíncrona devuelve una promesa. Por lo tanto, necesitamos algún proceso para esperar todo, obtener todos los data, y convertir las funciones asíncronas en componentes de función regulares. Necesitamos que esa pieza exista.
¿Cómo funciona eso? Veámoslo revisando la siguiente parte. Así que guardaremos todo, y revisaremos el número 2. Entonces, algunas cosas han cambiado. Esto es ahora un componente completo del servidor, async await. Veamos qué pasó en el lado del servidor. Si vamos a server.tsx, un par de cosas. Tenemos esta nueva función llamada unwrapjsx. Unwrapjsx, y esto de nuevo es para fines de aprendizaje, es mucho más complicado, pero esto es de la cosa de Dan. Unwrapjsx es una función que mira tu gran árbol de objetos de React, ¿verdad? Cada aplicación de React, una vez más, llega a tipo es, digamos que el tipo es un div, y las propiedades son algo con hijos, y los hijos podrían ser literalmente como un conjunto de objetos de React profundamente anidados de objetos, ¿verdad? Así que esto es válido. De hecho, tal vez le demos algún valor. Bien, así que mira esto. Así que esta función unwrapjsx mirará esto y dirá, los hijos pueden ser una cadena o un número o un Booleano o un array de cosas. Esto es realmente legal. Incluso podría ser un componente de función asíncrona. Podría ser cualquier cosa. Además, en lugar de un componente incorporado que es una cadena, esto es válido. Y con los componentes del servidor, incluso esto es válido, ¿verdad? Así que un montón de cosas son válidas. Así que esta función de desempaquetado va a mirar todos estos casos y devolver un JSX ponderado. ¿Claro? Así que si nuestro JSX aquí que le estamos pasando es una cadena o un número o un Booleano, que es válido, ¿verdad? Podríamos hacer algo como, como los hijos podrían ser esto. Técnicamente incluso podría ser esto. En este caso, simplemente lo devolvemos tal como está. Si es un array, esperamos todas las promesas que existen en el fragmento del array. Si es un objeto, y luego si ese objeto es un elemento de react, esta propiedad, $$typeoff, indica que un objeto no es sólo un objeto, sino que es un elemento de react. Así que si es un elemento de react, ¿entonces qué? Hay dos tipos, ¿verdad? Hay funciones e incorporadas. Así que manejamos el caso incorporado por, si hay alguna propiedad asíncrona, que puede ser hijos, nosotros los esperamos. Para los componentes de función, similar. Esperamos las propiedades, luego llamamos a la función con sus propiedades. Esto es react, ¿verdad? Llamas a tu componente con sus propiedades, lo esperas, y luego lo desenvuelves. Así que simplemente pasamos por todo este largo árbol y esperamos todo. Y al final de ello, ¿qué tenemos? Tenemos un gran árbol con todas las dependencias de data resueltas. ¿Está claro? Simplemente tenemos un árbol con todo obtenido. ¿Entonces qué hacemos? Luego, entregamos ese árbol a renderToString, o renderToPyblestream, o algo que luego tome la salida de los componentes del servidor y la pase por la red. En este caso, el renderizador del lado del servidor, renderToString, renderToPylblestream, etc, se convierte en un cliente del renderizador de componentes del servidor. Así que el servidor es el cliente. Se complica un poco, pero eso es esencialmente lo que está pasando.
¿Cómo se ve esto en la práctica? Bueno, si venimos aquí a nuestra página de router slash, estamos importando dinámicamente la exportación por defecto. Antes de renderToString, hemos añadido otro paso. Desenvolvemos el JSX. Desenvolver simplemente significa esperar todas las promesas. Así que pasamos nuestra aplicación. Decimos, hey, si hay algo asíncrono aquí, espera todo eso. Y luego dame un árbol JSX con todas las dependencias de data resueltas, renderiza eso a una cadena y envíalo. Veamos cómo funciona eso. Así que ten en cuenta, no estamos usando React en el lado del cliente en absoluto aquí.
Comments