Récupération des données du loader via les paramètres d'URL dans React Router

Dans la leçon précédente, nous avons écrit une fonction pour récupérer les données de la page produit, importons getProduct dans le fichier product.jsx :

routes/product.jsximport { getProduct } from '../forStorage';

Écrivons la fonction loader loader immédiatement après l'importation et avant la fonction Product. Passons-lui les paramètres d'URL :

routes/product.jsxexport async function loader({ params }) {
  const product = await getProduct(params.productId);
  return { product };
}

Importons également le hook useLoaderData pour utiliser les données récupérées par le loader :

routes/product.jsximport { useLoaderData } from 'react-router-dom';

Appliquons useLoaderData, en remplaçant en conséquence la ligne de création de l'objet product au début de la fonction Product par la suivante :

routes/product.jsxconst { product } = useLoaderData();

Et, bien sûr, modifions légèrement notre balisage, puisque nous avons supprimé l'ancien objet product. Remplaçons le contenu des paragraphes :

routes/product.jsx<p>Name: {product.name}</p>
<p>Cost: {product.cost}</p>
<p>Amount: {product.amount}</p>

Par ceci :

routes/product.jsx<p>Nom: {product.name ? product.name : <i>unnamed</i>}</p>
<p>Prix: {product.cost ? product.cost : <i>unknown</i>}</p>
<p>Quantité: {product.amount ? product.amount : <i>unknown</i>}</p>

Il nous reste à ouvrir main.jsx et y ajouter l'import de loader, appelons-le productLoader :

main.jsximport Product, {
  loader as productLoader,
} from './routes/product';

Et à le spécifier comme loader pour l'objet de route de la page produit, en l'ajoutant dans children après la propriété element :

main.jsxchildren: [
  {
    path: 'products/:productId',
    element: <Product />,
    loader: productLoader,
  },
],

Voilà, nous avons réglé le chargement des données pour la page produit ! Cependant, nous n'avons rien à charger pour le moment. Lancez l'application, ajoutez des produits et cliquez sur eux dans la liste pour vous assurer que tout fonctionne.

Задание 1

Prenez l'application que vous avez créée dans les travaux pratiques des leçons précédentes. En utilisant le contenu de cette leçon, implémentez un loader, connectez-le, et utilisez les données qu'il fournit pour la page de l'étudiant.