У меня есть меню и основная часть страницы. Я создал разные страницы как компоненты с некоторым текстом. Все, что я хочу, это чтобы при нажатии на меню боковой панели компоненты отображались на главной странице. Как я могу заставить это работать?
const items2 = [{
label: 'Rice',
key: 'rice',
},
{
label: 'AB Test',
key: 'ab',
}]
const MainLayout = () => {
const {
token: { colorBgContainer },
} = theme.useToken();
const navigate = useNavigate();
const onClick = (e)=>{navigate(`/${e.key}`)}
return (
<Layout>
<Sider >
<Menu
mode = "inline"
items = {items2}
onClick = {onClick}
/>
</Sider>
<Content >
//Хочу открыть страницы здесь
</Content>
</Layout>
</Content>
Вам нужно использовать react-router-dom для навигации, когда вы нажимаете другой элемент MenuItem. Создайте свой собственный RouterProvider и разместите его в Контенте.
<Content>
<RouterProvider router = {router}>
</Content>
РЕДАКТИРОВАТЬ
Теперь у вас есть два способа перейти к вашему компоненту. Сначала используйте ссылку и установите ее на свой ярлык.
{
label: <Link title = "Rice" to = "/rice">Rice</Link>,
key: 'rice',
}
Второй способ — использование хукаNavigate
const navigate = useNavigate();
const onClick = (e)=>{navigate(`/${e.key}`)}
//Add to Menu
<Menu
onClick = {onClick}
//other props
/>
Итак, я понимаю, что мне нужно добавить этот код в раздел содержимого. Когда я вызываю path/rice, он отображает компонент <Rice/>, но теперь, как мне вызвать ссылку в моем меню... я обновил свой основной комментарий, чтобы показать, что я сделал дальше <Router> <div> <hr /> <Переключатель> <Точный путь = "/"> <Главная /> </Маршрут> <Путь маршрута = "/rice"> <Рис /> </Маршрут> <Путь маршрута = "/abtest"> <ABTest /> </Route> </Switch> </div> </Router>
Я отредактировал свой ответ, вы можете следить за ним, чтобы продолжить
поэтому я могу вызывать переход к страницам, когда я нажимаю на меню.. но мое требование - открывать эти страницы между <Content> </Content>, чтобы он отображался, пока я сохраняю боковую панель/макет меню на месте
Чтобы визуализировать компонент внутри другого компонента, React предоставляет специальное имя реквизита children
.
Чтобы выполнить ваше требование, вы можете сделать следующее:
MainLayout.js:
export const MainLayout = ({children}) => {
const {
token: { colorBgContainer },
} = theme.useToken();
const navigate = useNavigate();
const onClick = (e)=>{navigate(`/${e.key}`)}
return (
<Layout>
<Sider>
<Menu
mode = "inline"
items = {items2}
onClick = {onClick}
/>
</Sider>
<Content>
{children}
</Content>
</Layout>
)
}
В MainLayout.js
вам нужно только написать {children}
внутри компонента <Content>
, React сделает все остальное, чтобы вы передали содержимое Rice или AB или что-то еще для вас. На каждой странице просто поместите <MainLayout>
в верхней части остального кода.
См. 2 примера файлов ниже.
Рис.js:
import MainLayout from './MainLayout';
export const Rice = () => {
// Do some stuffs here...
return (
<MainLayout>
<div>
<h2>Best rated rice in the World</h2>
<ol>
<li>Pinipig</li>
<li>Riz de Camargue</li>
...
</ol>
<div>
</MainLayout>
)
}
Кукуруза.js:
import MainLayout from './MainLayout';
export const Corn = () => {
// Do some stuffs here...
return (
<MainLayout>
<div>
<h2>Best Corn Side Dish Recipes</h2>
<ol>
<li>Whipped-Cream Corn Salad</li>
<li>Classic Grilled Corn on the Cob</li>
...
</ol>
<div>
</MainLayout>
)
}
Вы можете прочитать больше и поэкспериментировать с примером кода из официальных документов React.
Это основная концепция React, поэтому, прежде чем вы начнете создавать что-то большое, я предлагаю сначала следовать этой документации или найти несколько руководств по React для начинающих, они объяснят ключевые концепции React, чтобы вы не экономили больше времени.
Я до сих пор не понимаю, как использовать детей. MainLayout.js: здесь я хочу показать различные компоненты <Rice/> или <AB/> в зависимости от нажатия на меню.
Все, что обернуто компонентом <MainLayout>, считается дочерним. Возьмем пример, у вас есть файл Rice.js, в этом файле вы пишете код страницы «Rice» внутри компонента <MainLayout>, поэтому все это передается в реквизите children
. Я отредактирую свой ответ, чтобы вы могли прояснить это.
Я отредактировал ответ. Поскольку у вас уже есть react-router-dom, вы можете скопировать приведенный выше код и поэкспериментировать, чтобы увидеть результаты.
Потрясающий. Ты - лучший! Работает сейчас.
Можете ли вы дать мне некоторые подробности. Я новичок в React. Я посмотрел на поставщика маршрутизатора... Куда мне вставить этот код, упомянутый в ссылке RouterProvider? а потом как мне получить к нему доступ через меню?