Обработка ошибки Not Found в React Router

При создании приложения нужно обратить внимание и на появление различных ошибок в процессе его дальнейшего использования. В этом уроке мы научимся работать с ошибкой 'Not Found'. Такая ошибка может выскочить, к примеру, если пользователь кликнет по ссылке, ведущей на несуществующую страницу.

Для начала давайте откроем наше приложение, которое мы делали на прошлых уроках, и заменим верстку компонента Root. Теперь при запуске приложения у нас будет отображаться список из двух продуктов:

function Root() { return ( <nav> <a href={`/products/1`}>Product1</a> <a href={`/products/2`}>Product2</a> </nav> ); } export default Root;

Добавим немного стилей в index.css:

body { font-size: 18px; line-height: 1.5; } nav { display: flex; flex-direction: column; } a { text-decoration: none; color: blue; }

А сейчас покликайте по ссылкам. Поскольку у нас нет макетов страничек для наших продуктов, то ссылки приведут нас только на экран с ошибкой '404 Not Found' и упреком в том, что мы могли бы придумать сами что-то покрасивей и поинтересней, чем то, что React Router отобразил нам по умолчанию.

Давайте сделаем нашу собственную страничку, которая будет отображаться в случае появления ошибки 404. Для этого в папке src создадим файлик error-page-404.jsx.

Внутри React компонента ErrorPage404 мы воспользуемся хуком useRouteError для отлавливания ошибки, которую мы будем выводить в консоль.

import { useRouteError } from 'react-router-dom'; function ErrorPage404() { const error = useRouteError(); console.error(error); } export default ErrorPage404;

Далее в верстке компонента ErrorPage404 мы будем отображать пару заголовков, сообщающих об ошибке и выведем такие свойства объекта error, как statusText и data (объект error и его свойства вы также можете увидеть, если откроете консоль и начнете кликать по нашим ссылкам в приложении).

return ( <div> <h1>Hi! It is an Error Page</h1> <h2>404 Not Found Error</h2> <p> <i>{error.statusText}</i> </p> <p> <i>{error.data}</i> </p> </div> );

Обязательно не забудьте открыть файл main.jsx и добавить еще одну строчку импорта с ErrorPage404:

import ErrorPage404 from './error-page-404';

А также добавьте еще одно свойство errorElement в объект Router - этот элемент выводится, когда на данном маршруте возникает ошибка. Значением элемента ошибки будет наш компонент ErrorPage404:

const router = createBrowserRouter([ { path: '/', element: <Root />, errorElement: <ErrorPage404 />, }, ]);

Возьмите приложение, созданное вами в задании к прошлому уроку. Добавьте на главную страницу список, состоящий из пары ссылок, как это показано в уроке. Пусть значениями href ссылок будут - /students/1 и /students/2, а текстом ссылок - 'Student1' и 'Student2' соответсвенно. Убедитесь, что при клике по ссылкам у вас появляется экран с ошибкой, которую React Router выводит по умолчанию.

А теперь создайте свою отдельную страничку с ошибкой 404, можете вывести на ней то, что хотите. Подключите ее, как показано в уроке. А теперь убедитесь, что при клике по ссылкам вы попадаете именно на нее.



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