TanStack Router предоставляет гибкую и мощную систему маршрутизации для современных веб-приложений на JavaScript. Одним из ключевых аспектов является обработка ошибок на различных уровнях маршрутов, что позволяет создавать стабильные приложения с предсказуемым поведением при возникновении непредвиденных ситуаций. Ошибки в роутере можно разделить на несколько типов, каждый из которых имеет свои особенности и методы обработки.
Описание: Ошибки загрузки маршрута возникают, когда
асинхронная функция loader, привязанная к конкретному
маршруту, не выполняется успешно. loader используется для
предварительной загрузки данных перед рендерингом компонента
маршрута.
Примеры причин:
Обработка:
errorElement — компонент,
который будет отображаться при ошибке загрузки.errorElement можно использовать
useRouteError() для получения информации об ошибке.import { useRouteError } from '@tanstack/router';
function LoaderErrorComponent() {
const error = useRouteError();
return <div>Произошла ошибка загрузки: {error.message}</div>;
}
loader автоматически приводит к
рендерингу errorElement.Описание: Ошибки навигации возникают во время перехода между маршрутами, когда не удается корректно изменить состояние маршрута.
Основные причины:
beforeExit
или beforeEnter, которые возвращают ошибку или
false.Обработка:
router:const router = createRouter({
routeTree,
onError: (error) => {
console.error('Ошибка навигации:', error);
},
});
errorElement
на маршруте, аналогично обработке ошибок загрузки.Описание: Возникают при выполнении функции
component или при рендеринге JSX, связанного с маршрутом.
Эти ошибки аналогичны обычным ошибкам React-компонентов.
Примеры причин:
loader.Обработка:
ErrorBoundary.errorElement для
конкретного маршрута, что удобно для локальной изоляции ошибок
рендера.function RenderErrorBoundary({ error }) {
return <div>Ошибка рендера маршрута: {error.message}</div>;
}
Описание: Ошибки действий (actions) возникают при
выполнении асинхронных функций action, которые обычно
используются для обработки форм и мутаций данных на сервере.
Примеры причин:
Обработка:
action приводит к активации
errorElement, который можно использовать для отображения
сообщения пользователю.useFormSubmit() и аналогичные хуки позволяют
обрабатывать ошибки на уровне компонента, сохраняя контроль над UX.Описание: Включают все ошибки, которые не были перехвачены на уровне конкретного маршрута. Это может быть:
Обработка:
onError в настройках
роутера.const router = createRouter({
routeTree,
onError: (error) => {
// глобальная обработка
alert('Произошла критическая ошибка: ' + error.message);
},
});
errorElement.loader и action обрабатываются
через асинхронные функции и автоматически вызывают рендеринг компонента
ошибки.onError
для централизованного контроля.Хотите, я дополнительно подготовлю схему, которая визуально показывает типы ошибок и их обработку в TanStack Router?