A medida que pasamos a ver cómo usamos esta función para cargar datos en nuestros componentes de ruta, Remix en realidad tiene una opinión, y hablaremos sobre algunas de esas diferencias. A continuación, echaremos un vistazo a este archivo index.jsx en nuestra carpeta de rutas. El framework Remix utiliza un sistema de enrutamiento basado en archivos, que es similar a lo que podrías encontrar en Next.js o Nuxt si vienes del mundo de Vue, por lo que hay una buena cantidad de superposición en cómo este framework maneja el enrutamiento. Y veremos algunos ejemplos más complejos en un momento.
Si abrimos nuestro archivo index.jsx, podemos ver que estamos importando algunos componentes aquí, y luego exportamos este componente de índice que devuelve todos estos elementos jsx que renderizarán nuestra aplicación. Pero en este momento, todos nuestros datos están codificados en la variable projects, por lo que el siguiente paso que abordaremos es cargar nuestros datos dinámicamente desde WordPress. Para lograr eso, simplemente agregaremos un par de declaraciones de importación aquí arriba, y los copiaré rápidamente desde fuera de la pantalla. Importaremos dos cosas diferentes. Entonces importaremos nuestra función getProjects desde este archivo de servicio de WordPress, y luego también importaremos este gancho de datos useLoader de Remix en sí mismo. Una vez que hayamos hecho eso, bajaremos aquí y crearemos otra exportación, y esta será una función asíncrona llamada loader, que es una convención de Remix. Lo que sucederá es que cuando Remix renderice tus componentes, llamará a lo que esté dentro de esta función loader en el servidor, y se conectará a tu servicio, sea cual sea, en nuestro caso WordPress y GraphQL, para obtener algunos datos, y luego podremos acceder a los datos que esta función loader devuelve utilizando el gancho de datos useLoader. Entonces, en este ejemplo, todo lo que necesitamos hacer es agregar una declaración de retorno, y luego esperaremos el resultado de getProjects. Nuevamente, esa es una de las razones por las que personalmente me gusta desarrollar de esta manera. Me gusta tener un archivo de servicio con todas mis diferentes llamadas de datos para que mis componentes de ruta puedan ser muy limpios. Alternativamente, podrías hacer parte de esto dentro de esta función loader. Eso depende completamente de ti y de cómo quieras manejarlo, y para ser honesto, no estoy seguro de si a Remix realmente le importa de todos modos. Entonces tenemos esta función loader, estamos haciendo algo de trabajo en ella, y depende de nosotros determinar qué es lo que queremos hacer. Y luego, lo que haremos aquí es en lugar de codificar en duro esta matriz, podemos usar el gancho de datos useLoader. Así que estableceremos projects igual al resultado de esta función useLoader, y si guardamos eso y actualizamos nuestra página aquí, podemos ver que boom, funcionó tal como esperábamos. Cuando se llama a esta ruta de índice, vamos a renderizar ese componente. Esta función loader llama a getProjects en el servidor, devolvemos esos datos, y luego usamos esos datos a través de este gancho para poblar estos componentes de proyecto aquí abajo. Así que fantástico, tenemos nuestra página de índice funcionando como queremos, pero creo que podría ser el momento de hacer una pausa por un segundo y discutir esta elección orientada que hace el framework Remix.
He trabajado en varios proyectos de Next.js y otros proyectos de React donde parte de la carga de datos que estamos haciendo ocurre completamente en el cliente. Y así que si estamos acostumbrados a usar el gancho useQuery de Apollo, por ejemplo, y hacer que esos componentes realicen esas llamadas a nuestro servidor GraphQL en el cliente, esto es un poco de cambio de paradigma, si quieres, ¿verdad?, porque cada una de estas funciones loader solo se llama en el servidor. Creo que el equipo de Remix tomó esa decisión por una muy buena razón, y han enumerado esas razones en muchos videos, así que no las repetiré, y te animo a que veas algunos de los sencillos de Remix para tener una buena idea de ellas. Pero de alguna manera, nos ayuda a los desarrolladores a simplificar el tipo de código que estamos escribiendo, ¿verdad? Si miramos un framework como Next.js, por ejemplo, donde tal vez estamos generando un sitio estático y luego algunas cosas se cargan en el cliente, tiende a volverse un poco desordenado, ¿verdad?, porque tenemos todas estas abstracciones diferentes para estos diferentes casos de uso, donde creo que Remix simplifica eso. Dice que esta es la única forma en que vamos a cargar datos en los componentes, por lo que eso lo hace un poco más fácil. También facilita un poco el manejo de credenciales, ¿verdad? Si estuviera realizando llamadas autenticadas a una base de datos, dado que todas estas llamadas de obtención de datos y la función loader ocurren en el servidor, no tengo que preocuparme por filtrar mis credenciales al cliente. Así que hay algunas ventajas en esto que definitivamente recomiendo que explores si eres nuevo en Remix y compares y contrastes con el framework que elijas en ese momento. Ahora que tenemos nuestra página de índice como queremos, cada uno de estos enlaces en realidad es un enlace a un proyecto individual.
Comments