Добијање података учитавача преко URL параметара у React Router-у

У претходној лекцији смо написали функцију за добијање података странице производа, хајде да увеземо getProduct у фајл product.jsx:

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

Написаћемо функцију учитавача loader одмах након увоза и пре функције Product. Проследићемо јој URL параметре:

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

Такође увезимо куку useLoaderData за коришћење података добијених од учитавача:

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

Применимо useLoaderData, и то тако да заменимо ред са креирањем објекта product на почетку функције Product следећим:

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

И, наравно, мало ћемо променити нашу верстку, јер смо уклонили стари објекат product. Заменићемо садржај параграфа:

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

Следећим:

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

Преостаје нам да отворимо main.jsx и додамо тамо увоз loader, назваћемо га productLoader:

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

И указати га као учитавач за објекат руте странице производа, додајући га у children након својства element:

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

То је то, са учитавањем података за страницу производа смо завршили! Истина, немамо још шта да учитамо. Покрените апликацију, додајте производе и кликните на њих у листи, да бисте се уверили да све ради.

Задание 1

Узмите апликацију коју сте креирали у задацима из претходних лекција. Користећи се материјалом из лекције, имплементирајте loader, повежите га, искористите податке из њега за страницу са студентом.