Создание маршрута для редактирования данных в React Router

На прошлом уроке мы создали форму для редактирования в отдельном React компоненте EditProduct.

Давайте теперь напишем функцию загрузчика для нового маршрута сразу после импорта и перед функцией EditProduct. Она будет такой же, как и в product.jsx. В функцию будут передаваться URL параметры и далее мы будем получать продукт по его id:

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

Импортируем getProduct из forStorage.js:

import { getProduct } from '../forStorage';

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

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

Затем добавим в массив children объект маршрута для редактирования сразу после маршрута для продукта:

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

Теперь запустим приложение, создадим продукт, кликнем по нему, а затем по кнопке редактирования и увидим нашу формочку.

Единственное, еще нам нужно сделать так, чтобы в полях формы перед редактированием были загружены текущие данные. Для этого мы импортируем в edit.jsx хук useLoaderData:

import { Form, useLoaderData } from 'react-router-dom';

И применим его для получения данных из загрузчика в функции EditProduct. Добавим его перед командой return:

const { product } = useLoaderData();

Теперь добавим в каждый тег инпут атрибут defaultValue с соответсвующими значениями для каждого инпута. Например, первый инпут теперь будет выглядеть так:

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

Для двух оставшихся инпутов значения будут соответственно 'product.cost' и 'product.amount'. Правда пока что данных в форме у нас нет.

Возьмите приложение, созданное вами в заданиях к прошлым урокам. Пользуясь материалами урока, создайте функцию loader в edit.jsx для маршрута редактирования данных студента.

Добавьте в массив children объект маршрута для редактирования.

Добавьте для вашей функции EditStudent требуемый в уроке код.



Чат с GPT Компилятор