Маршруты в React Router

Маршруты (Routes) являются наиважнейшей частью приложения на React Router. Рассмотрим кусочек кода с прошлого урока:

main.jsxconst router = createBrowserRouter([
  {
    path: '/',
    element: <div>Hello Router!</div>,
  },
]);

Так вот, свойства объекта path и element, которые мы передавали в функцию при создании роутера, и есть свойства объекта Route. На самом деле, этот объект имеет множество свойств, их можно найти в официальной документации. В дальнейшем, нам пригодятся некоторые из них:

jsxinterface RouteObject {
  path?: string;
  index?: boolean;
  children?: React.ReactNode;
  caseSensitive?: boolean;
  id?: string;
  loader?: LoaderFunction;
  action?: ActionFunction;
  element?: React.ReactNode | null;
  Component?: React.ComponentType | null;
  errorElement?: React.ReactNode | null;
  ErrorBoundary?: React.ComponentType | null;
  handle?: RouteObject["handle"];
  shouldRevalidate?: ShouldRevalidateFunction;
  lazy?: LazyRouteFunction<RouteObject>;
}

Можно было воспользоваться альтернативным JSX стилем и написать свойства в виде пропсов для компонента Route, тогда бы наш кусочек кода выглядел бы так:

main.jsxconst router = createBrowserRouter(
  createRoutesFromElements(
    <Route
      path = '/'
      element = {<div>Hello Router!</div>}
    />
  )
);

И, конечно же, необходимо было бы добавить ещё пару строчек в импорт:

main.jsximport {
  createRoutesFromElements,
  createBrowserRouter,
  RouterProvider,
  Route,
} from 'react-router-dom';

Оба приведенных в уроке стиля равноценны. Мы в дальнейшем будем придерживаться первого варианта.

Задание 1

Возьмите приложение, созданное вами в заданиях к прошлым урокам. Попробуйте переписать кусочек кода для создания роутера (старый пока закомментируйте), используя альтернативный JSX синтаксис, приведенный в уроке. Убедитесь, что приложение работает.

Задание 2

Верните на место весь старый код, а новый уберите. Убедитесь, что приложение работает.