Chargement des données
Pour pouvoir afficher des données dynamiques sur nos pages, nous allons devoir charger ces données. C'est le rôle de la fonction loader exportée dans un module route.
À noter que cette fonction n'est utilisée que côté serveur. Elle ne se retrouvera jamais dans un navigateur.
Définir un loader dans le module route d'une playlist. Afin d'afficher les informations suivantes :
- Nom de la playlist
- Titre et auteur des chansons de la playlist.
Guide
💿 Définir une fonction loader
Exporter une fonction loader.
Voir une solution
export const loader = () => {
return null;
};
💿 Récupérer l'id de la playlist à afficher
Remix appelle notre fonction loader avec différentes données :
- une
requestobjetRequestde l'API Fetch - les
paramscorrespondant aux segments dynamiques de l'URL - un
contextremix
On pourra ainsi récupérer le segment dynamique de l'URL dans params.
Voir une solution
export const loader = ({ params }: LoaderArgs) => {
const id = params.id;
return null;
};
💿 Récupérer les données de la playlist
Maintenant que nous avons l'id, nous allons pouvoir récupérer les données dans notre base de données.
Pour faire simple, nous allons directement appeler notre repository dans le loader. Pas de risque, la fonction n'existe que côté serveur.
Vous pouvez utiliser le repository playlists pour retrouver les données d'une playlist.
Voir une solution
export const loader = async ({ params }: LoaderArgs) => {
const id = params.id;
const playlist = await playlists.find(id || "");
return null;
};
💿 Retourner les données en réponse du loader
La sortie du loader doit correspondre à une réponse de l'API Fetch. Pour nous aider, Remix met à disposition un helper json qui nous permet de retourner une réponse avec des données au format json.
Voir une solution
export const loader = async ({ params }: LoaderArgs) => {
const id = params.id;
const playlist = await playlists.find(id || "");
if (!playlist) {
throw new Error("playlist not found");
}
return json(playlist);
};
Pour tester votre API, vous pouvez accéder à la route suivante : http://localhost:3000/playlists/f63a5aee-eff0-46e4-a896-98f9af15ad84?_data
Le query params _data permet d'indiquer à Remix que l'on souhaite les données du loader et la page associé à la route.
Voyons comment utiliser lire les données du loader dans notre composant.