Креирање руте за уређивање података у Реакт Роутер-у

На прошлом часу креирали смо форму за уређивање у одвојеном Реакт компоненту EditProduct.

Хајде сада да напишемо функцију учитавача за нову руту одмах након увоза и пре функције EditProduct. Она ће бити иста, као и у product.jsx. У функцију ће се прослеђивати URL параметри а затим ћемо добијати производ по његовом id:

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

Увезимо getProduct из forStorage.js:

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

А сада ћемо отворити наш main.jsx и увезти креирану компоненту EditProduct и учитавач:

main.jsximport EditProduct, { loader as editProductLoader } from './routes/edit';

Затим додајмо у низ children објекат руте за уређивање одмах после руте за производ:

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

Сада покренимо апликацију, креирајмо производ, кликнимо на њега, а затим на дугме за уређивање и видећемо нашу формицу.

Једино, још нам треба да урадимо тако да у пољима форме пре уређивања буду учитани тренутни подаци. За ово ћемо увести у edit.jsx кукац useLoaderData:

routes/edit.jsximport { Form, useLoaderData } from 'react-router-dom';

И применимо га за добијање података из учитавача у функцији EditProduct. Додајмо га пре наредбе return:

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

Сада додајмо у сваки таг инпут атрибут defaultValue са одговарајућим вредностима за сваки инпут. На пример, први инпут сада ће изгледати овако:

routes/edit.jsx<input
  placeholder="name"
  type="text"
  name="name"
  defaultValue={product.name}
/>

За два преостала инпута вредности ће бити одговарајуће 'product.cost' и 'product.amount'. Истина, за сада података у форми немамо.

Задание 1

Узмите апликацију коју сте креирали у задацима за прошле часове. Користећи се материјалима са часа, креирајте функцију loader у edit.jsx за руту уређивања података студента.

Задание 2

Додајте у низ children објекат руте за уређивање.

Задание 3

Додајте за вашу функцију EditStudent захтевани код са часа.