Cada componente es responsable de renderizar su propio fallback de carga, y va a renderizar data tan pronto como su solicitud de red devuelva esos data. No tenemos más control sobre ello que eso, simplemente estamos dejando que estos componentes se rendericen cuando los data estén listos.
Es un poco visualmente distractorio, tener esas cuatro áreas cargadas completamente dependiendo de cuándo se resuelve esa solicitud de red. Así que en realidad vamos a escribir algo de código juntos. Vamos a hacer la transición de esta aplicación habilitada para UseQuery a una aplicación habilitada para UseSuspenseQuery.
Así que vamos a abrir esta demostración aquí, y de nuevo, como dije, con esto es con lo que vamos a trabajar hoy. Sólo para refrescar, esta es exactamente la misma experiencia que viste en ese video hace un segundo. Ese efecto de palomitas de maíz que ves cuando se cargan los data. Y sólo para orientarnos un poco con esta aplicación aquí, aquí tengo mi diseño aquí. Puedes ver esas cajas de colores, cada uno de esos componentes allí, la barra lateral, el menú de usuario, la ruta, y la barra de reproducción, que cada uno representa una de esas áreas que carga algunos data.
Así que vamos a empezar y en realidad convertir uno de estos componentes a UseSuspenseQuery. Vamos a empezar con el menú de usuario allí, que es esa caja verde en la parte superior derecha. Así que para hacerlo, aquí está mi componente, UseQuery. Ves que tengo mi consulta GraphQL, mi importación de UseQuery, y un sitio bastante familiar aquí, ese data y los Booleanos de carga. Cuando ese Booleano de carga es verdadero, devolvemos nuestro estado de carga, y eso es lo que vemos.
Así que para convertir esto a Suspense, voy a empezar importando UseSuspenseQuery, reemplazar el uso aquí, y algo que vas a notar de inmediato cuando hagamos este cambio es que obtenemos este error aquí, la propiedad de carga no existe en el tipo UseSuspenseQueryResult. Y eso es porque con la mecánica de Suspense, en realidad no necesitamos ese Booleano de carga porque vamos a dejar que Suspense se encargue de esto por nosotros. Así que no tiene sentido, en realidad podemos eliminar eso. Y debido a eso, ya no necesitamos nuestro estado de carga. Algo a lo que también debes prestar atención aquí, con esto, si fuera a echar un vistazo al tipo de esa propiedad data, si estás acostumbrado a usar esto con UseQuery, estás acostumbrado a ver una unión con indefinido aquí también. Con la aplicación habilitada para Suspense, en realidad funciona como si esto fuera un código sincrónico. Ves que nuestro tipo de consulta aquí es ese tipo de consulta de UserMenu, lo cual es realmente genial, permite algunas cosas bonitas sobre esto. Para esta demostración, queremos hacer un cambio. Nos gusta dar pequeños pasos y ver qué hace ese cambio en nuestra aplicación. Así que volvamos a nuestra aplicación aquí y refresquémosla para ver qué hizo ese cambio.
Bueno, ahora estamos viendo una pantalla en blanco por una fracción de segundo, y en la primera pintura vemos que el UserMenu fue cargado allí. Fue bastante rápido, así que tal vez podamos refrescar de nuevo, Gerald. Así que no verás el resaltado verde alrededor del UserMenu en la parte superior derecha porque para el momento en que nuestra aplicación se renderiza por primera vez, los data están presentes para ese UserMenu. Así que estamos obteniendo los data para nuestro UserMenu con nuestro hook habilitado para Suspense, pero no estamos mostrando un fallback de carga todavía. Para eso, vamos a necesitar un SuspenseBoundary.
Comments