Обновление данных с FormData в React Router

У нас есть функция updateProduct для обновления данных продукта в хранилище. Теперь перейдем к данным из нашей формы для редактирования.

При отправке HTML-формы браузер создает объект FormData с данными и посылает его в теле запроса на сервер. Причем, значение каждого инпута извлекается в объект из атрибута name (поэтому они и были нужны нам в форме, помните?). Мы теперь знаем, что React Router отправляет запросы не на сервер, а в метод action нашего маршрута, соответственно, туда попадет и FormData. Давайте поработаем с этим.

Для начала откроем наш файлик edit.jsx и импортируем updateProduct:

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

Затем мы напишем функцию для action объекта маршрута, как делали это раньше. Добавим ее сразу после функции loader. Ей мы будем передавать наш request и URL параметры:

export async function action({ request, params }) {}

Из запроса мы получим FormData, затем извлечем из него данные в виде объекта, содержащего пары ключ: значение и с помощью updateProduct отправим эти данные в хранилище:

export async function action({ request, params }) { const formData = await request.formData(); const updates = Object.fromEntries(formData); await updateProduct(params.productId, updates); return 1; }

Осталось только зайти в main.jsx и добавить функцию action в объект маршрута редактирования. Импортируем action:

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

И добавим его в объект маршрута редактирования:

{ path: 'products/:productId/edit', element: <EditProduct />, loader: editProductLoader, action: editAction, },

Запустите теперь приложение, добавьте пару продуктов в список, затем кликая по ним заполняйте форму и нажимайте на кнопку сохранения. Не забудьте зайти в панель разработчика в раздел localforage и обновлять хранилище. Теперь в разделе keyvaluespairs мы можем видеть объекты в массиве products с нашими внесенными данными.

Возьмите приложение, созданное вами в заданиях к прошлому уроку. Пользуясь материалами урока, создайте функцию action для маршрута редактирования данных студента, добавьте ее в объект маршрута редактирования. Откройте панель разработчика и убедитесь, что при изменениях обновленные данные действительно отображаются на вкладке localforage.



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