Вот мой код 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>
</>
),
},
],
},
],
},
];
Маршруты 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 />
}
]
}
];
выше я добавил обновленный код в соответствии с вашим ответом
@manindersingh Можете ли вы уточнить, что именно не работает? Вы пробовали решение, которое я предлагаю в своем ответе? Я протестировал это в работающей codeandbox, и маршрутизация работает так, как я и ожидал. Не стесняйтесь разветвлять эту песочницу и добавлять больше своего фактического кода, чтобы посмотреть, сможете ли вы воспроизвести проблему со своей стороны. Я более чем счастлив взглянуть/проверить.
Да, это работает и в моей системе, но только когда я использую <Link></Link>, но мне не нужна навигация с помощью Link. Я хочу перемещаться по нажатию кнопки, как здесь const navigation = useNavigate(); const onClickSignIn = () => { localStorage.setItem("токен", "dfdfdfdfdf"); перейти("/доход/отправить письмо-предложение"); };
@manindersingh Ссылки и кнопки не меняют работу маршрутизации. Я обновил демо, чтобы использовать кнопки и функцию navigate
, и все это по-прежнему работает, как и ожидалось. Можешь еще раз заглянуть в песочницу?
Я создал форму входа в систему, и когда я нажимаю кнопку входа, я использую Навигацию для перехода к определенной странице... Это работает, только если я объявляю <Link ></Link>, если я комментирую все теги ссылок, тогда это не навигация
если возможно, вы можете закомментировать все ссылки, а затем попытаться перейти, нажав кнопку
@manindersingh Вы можете так же легко попробовать это в песочнице и убедиться в этом сами. В любом случае, да, я закомментировал ссылки в песочнице, и кнопки навигации работают точно так же.
@manindersingh Посмотрите, можете ли вы разветвить мою песочницу и скопировать больше вашего фактического кода, чтобы мы могли видеть, с чем вы действительно работаете.
если я перенаправляюсь на «localhost: 3000/revenue », то он работает нормально, но не работает с этим « localhost: 3000/revenue/send-offer-letter», и т. е. каков мой запрос !!