Как я могу управлять двумя разными макетами, используя useRoutes в реакции

Вот мой код useRoute ниже. Все, что я хочу, это если я перехожу на страницу доходов... она работает нормально, но когда я перехожу на "http://localhost:3000/revenue/send-offer-letter", браузер показывает пустой экран. Как я могу это использовать?

константа MainRoutes = [ { путь: "/", элемент: , дети: [ { путь: "/", элемент: , }, { путь: "/расписание", элемент: , }, ], },

{ путь: "доход", элемент: , дети: [ { путь: "", элемент: , }, { путь: "отправить-предложение-письмо", элемент: , }, ], }, ];


I want nested routing with two different layout screens.

@Drew here is my updated code as your answer 

import { Outlet } from "react-router-dom";

const MainLayout = () => {
  return (
    <Outlet /> // <-- nested routes render content here!
  );
};

const RevenueLayout = () => {
  return (
    <Outlet /> // <-- nested routes render content here!
  );
};

const MainRoutes = [
  {
    path: "/",
    children: [
      {
        element: <MainLayout />,
        children: [
          {
            index: true,
            element: (
              <>
                <h1>Main Layout First Page</h1>
              </>
            ),
          },
          {
            path: "/schedule",
            element: (
              <>
                <h1>Main Layout Second Page</h1>
              </>
            ),
          },
        ],
      },
      {
        path: "/revenue",
        element: <RevenueLayout />,
        children: [
          {
            index: true,
            element: (
              <>
                <h1>Revenue First Page</h1>
              </>
            ),
          },
          {
            path: "send-offer-letter",
            element: (
              <>
                <h1>Revenue Second Page</h1>
              </>
            ),
          },
        ],
      },
    ],
  },
];



Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Маршруты MainLayout и RevenueLayout обязательно должны отображать компонент Outlet для вложенных дочерних маршрутов, чтобы отображать их содержимое element.

Пример:

import { Outlet } from 'react-router-dom';

const MainLayout = () => {
  ...

  return (
    ...
    <Outlet /> // <-- nested routes render content here!
    ...
  );
};

const RevenueLayout = () => {
  ...

  return (
    ...
    <Outlet /> // <-- nested routes render content here!
    ...
  );
};

Рефакторинг маршрутов, чтобы "/revenue" был дочерним маршрутом корневого "/" маршрута.

const mainRoutes = [
  {
    element: <MainLayout />,
    children: [
      {
        index: true,
        element: <Home />
      },
      {
        path: "/schedule",
        element: <ExpenseManagement />
      }
    ]
  },
  {
    path: "revenue",
    element: <RevenueLayout />,
    children: [
      {
        index: true,
        element: <SendOfferLetter />
      },
      {
        path: "send-offer-letter",
        element: <ApplicantList />
      }
    ]
  }
];

Демо

если я перенаправляюсь на «localhost: 3000/revenue », то он работает нормально, но не работает с этим « localhost: 3000/revenue/send-offer-letter», и т. е. каков мой запрос !!

maninder singh 21.04.2023 07:04

выше я добавил обновленный код в соответствии с вашим ответом

maninder singh 21.04.2023 07:21

@manindersingh Можете ли вы уточнить, что именно не работает? Вы пробовали решение, которое я предлагаю в своем ответе? Я протестировал это в работающей codeandbox, и маршрутизация работает так, как я и ожидал. Не стесняйтесь разветвлять эту песочницу и добавлять больше своего фактического кода, чтобы посмотреть, сможете ли вы воспроизвести проблему со своей стороны. Я более чем счастлив взглянуть/проверить.

Drew Reese 21.04.2023 07:26

Да, это работает и в моей системе, но только когда я использую <Link></Link>, но мне не нужна навигация с помощью Link. Я хочу перемещаться по нажатию кнопки, как здесь const navigation = useNavigate(); const onClickSignIn = () => { localStorage.setItem("токен", "dfdfdfdfdf"); перейти("/доход/отправить письмо-предложение"); };

maninder singh 21.04.2023 08:43

@manindersingh Ссылки и кнопки не меняют работу маршрутизации. Я обновил демо, чтобы использовать кнопки и функцию navigate, и все это по-прежнему работает, как и ожидалось. Можешь еще раз заглянуть в песочницу?

Drew Reese 21.04.2023 08:45

Я создал форму входа в систему, и когда я нажимаю кнопку входа, я использую Навигацию для перехода к определенной странице... Это работает, только если я объявляю <Link ></Link>, если я комментирую все теги ссылок, тогда это не навигация

maninder singh 21.04.2023 08:54

если возможно, вы можете закомментировать все ссылки, а затем попытаться перейти, нажав кнопку

maninder singh 21.04.2023 08:55

@manindersingh Вы можете так же легко попробовать это в песочнице и убедиться в этом сами. В любом случае, да, я закомментировал ссылки в песочнице, и кнопки навигации работают точно так же.

Drew Reese 21.04.2023 09:04

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

Drew Reese 21.04.2023 09:05

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