Детский маршрут не загружает компонент

Я пытаюсь создать конфигурацию маршрутизатора, используя createBrowserRouter. Что-то вроде ниже:

export const router = createBrowserRouter([
  {
    path: '/',
    element: <Root />,
    errorElement: <ErrorPage />,
    children: [
      {
        path: '/',
        element: <Home />,
      },
      {
        path: '/templates',
        element: (
            <Templates />
        ),
        children: [
          {
            path: 'template-history/:templateId', // Define template-history and templateId as parameters
            element: <Reports />,
          },
        ],
      },
    ],
  },
  
]);

 



Мне нужно создать детей по шаблону. Например, URL будет "http:localhost:3000/template/template-history/123".

проблема в том, что если я попробую указанный выше URL-адрес, он перенаправится на http:localhost:3000/

Вы пробовали свойство children? actrouter.com/en/6.22.2/routers/create-browser-router#rout‌​es

Lin Du 29.02.2024 07:42

Просто добавьте дочерние маршруты в "/templates", как вы это сделали для "/", то есть в корень. Или проблема в том, что Template отображает дочерние маршруты? Пожалуйста, отредактируйте , чтобы уточнить, в чем проблема. Включите полный минимально воспроизводимый пример, если есть более подходящий код, с которым вы работаете.

Drew Reese 29.02.2024 08:03

Да пробовал добавлять детей по шаблонам. Я пытался вызвать URL таким образом: http:localhost:3000/template/template-history/1234. если попытаться получить доступ к этому URL-адресу, он перенаправит меня на localhost:3000, корневой путь

Vipina K 29.02.2024 08:07

Я отредактировал вопрос, указав точный код, который есть в моем проекте.

Vipina K 29.02.2024 08:19

Маршрута "/template" нет, поэтому "/template/template-history/1234" не будет сопоставлен. Однако существует маршрут "/templates" с "s", поэтому "/templates/template-history/1234" можно сопоставить. Это просто опечатка в коде маршрутизации или в сообщении?

Drew Reese 29.02.2024 08:51

Комментарии @DrewReese, это просто опечатка

Vipina K 29.02.2024 09:27

Можете ли вы поделиться этим Templates компонентом? Предоставляет ли он Выход для вложенных маршрутов для отображения их содержимого?

Drew Reese 29.02.2024 09:56

Давайте продолжим обсуждение в чате.

Vipina K 29.02.2024 12:06

http:localhost:3000/templates/template-history/123, в этом случае компонент шаблонов, расположенный ниже этого компонента templatehistory, загружается в пользовательский интерфейс.

Vipina K 29.02.2024 12:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
9
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема после рендеринга Outlet: "localhost:3000/templates/template-histoty/1" этот URL загружает оба шаблоны и компонент истории шаблонов в пользовательском интерфейсе вместе.

Вот как маршруты макета работают с Outlet и их вложенными маршрутами. Если вы хотите, чтобы Templates и Reports отображались независимо, вам нужно сделать для них одноуровневые маршруты.

Примеры:

export const router = createBrowserRouter([
  {
    element: <Root />,
    errorElement: <ErrorPage />,
    children: [
      { path: '/', element: <Home /> },
      {
        path: 'templates',
        children: [
          {
            index: true,
            element: <Templates />,
          },
          {
            path: 'template-history/:templateId',
            element: <Reports />,
          },
        ],
      },
    ],
  },
]);
export const router = createBrowserRouter([
  {
    path: '/',
    element: <Root />,
    errorElement: <ErrorPage />,
    children: [
      { path: '/', element: <Home /> },
      {
        path: 'templates',
        element: <Templates />,
      },
      {
        path: 'templates/template-history/:templateId',
        element: <Reports />,
      },
    ],
  },
]);

Другие вопросы по теме

Похожие вопросы