Добавление данных с методом action в React Router

На этом уроке мы познакомимся с методом action объекта маршрута. Этот метод вызывается тогда, когда приложение посылает HTTPS запрос типа POST, PUT, PATCH или DELETE (кроме GET) вашему маршруту.

Для начала импортируем функцию для создания продукта, которую мы написали на прошлом уроке в наш root.jsx:

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

Теперь нам необходимо создать функцию action, которую будет вызывать React Router при клике по кнопке добавления продукта, разместим ее после функции loader:

export async function action() {
	const product = await createProduct();
	return { product };
}

Давайте откроем main.jsx и импортируем action:

import Root, {
	loader as rootLoader,
	action as rootAction
} from './routes/root';

И поставим ее в качестве значения метода action для объекта маршрута. Компонент Form не даст браузеру отправлять запросы на сервер при нажатии кнопки, а обратится к методу action нашего маршрута. Так интересно работает маршрутизация на стороне клиента с React Router:

const router = createBrowserRouter([
	{
		path: '/',
		element: <Root />,
		errorElement: <ErrorPage404 />,
		loader: rootLoader,
		action: rootAction,
		children: [
			{
				path: 'products/:productId',
				element: <Product />,
			},
		],
	},
	
]);

Запустим наше приложение. Откроем вкладку 'Приложение' (Application для Chrome) на панели разработчика, среди разных типов хранилищ кликнем на indexedDB, здесь нас интересует localforage. Теперь кликая на кнопку добавления продуктов в нашем приложении и обновляя хранилище localforage после клика мы видим, как в keyvaluepairs в массив products добавляются объекты с разными id. Победа!!! Это значит, что у нас в хранилище создаются записи! Конечно же список в нашем приложении тоже пополняется. Подсказка: не забудьте почистить потом сохраненные данные этой странички на вкладке 'Storage' в Application.

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



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