Рендеринг компонента внутри страницы реакции с использованием меню

У меня есть меню и основная часть страницы. Я создал разные страницы как компоненты с некоторым текстом. Все, что я хочу, это чтобы при нажатии на меню боковой панели компоненты отображались на главной странице. Как я могу заставить это работать?

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>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно использовать 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
/>

Можете ли вы дать мне некоторые подробности. Я новичок в React. Я посмотрел на поставщика маршрутизатора... Куда мне вставить этот код, упомянутый в ссылке RouterProvider? а потом как мне получить к нему доступ через меню?

Ahmed Nizami 08.02.2023 04:16

Итак, я понимаю, что мне нужно добавить этот код в раздел содержимого. Когда я вызываю path/rice, он отображает компонент <Rice/>, но теперь, как мне вызвать ссылку в моем меню... я обновил свой основной комментарий, чтобы показать, что я сделал дальше <Router> <div> <hr /> <Переключатель> <Точный путь = "/"> <Главная /> </Маршрут> <Путь маршрута = "/rice"> <Рис /> </Маршрут> <Путь маршрута = "/abtest"> <ABTest /> </Route> </Switch> </div> </Router>

Ahmed Nizami 08.02.2023 04:34

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

Nghe Minh 08.02.2023 07:31

поэтому я могу вызывать переход к страницам, когда я нажимаю на меню.. но мое требование - открывать эти страницы между <Content> </Content>, чтобы он отображался, пока я сохраняю боковую панель/макет меню на месте

Ahmed Nizami 08.02.2023 16:40
Ответ принят как подходящий

Чтобы визуализировать компонент внутри другого компонента, 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/> в зависимости от нажатия на меню.

Ahmed Nizami 08.02.2023 21:36

Все, что обернуто компонентом <MainLayout>, считается дочерним. Возьмем пример, у вас есть файл Rice.js, в этом файле вы пишете код страницы «Rice» внутри компонента <MainLayout>, поэтому все это передается в реквизите children. Я отредактирую свой ответ, чтобы вы могли прояснить это.

haptn 08.02.2023 21:40

Я отредактировал ответ. Поскольку у вас уже есть react-router-dom, вы можете скопировать приведенный выше код и поэкспериментировать, чтобы увидеть результаты.

haptn 08.02.2023 22:01

Потрясающий. Ты - лучший! Работает сейчас.

Ahmed Nizami 08.02.2023 22:31

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