在React页面中使用菜单呈现组件。

huangapple go评论87阅读模式
英文:

rendering a component inside a react page using Menu

问题

我有一个菜单和页面的主体。我已经创建了不同的页面作为组件,并添加了一些文本。我希望的是,当我点击侧边栏菜单时,这些组件会在主页面中显示。如何使这个工作?

  1. const items2 = [{
  2. label: 'Rice',
  3. key: 'rice',
  4. },
  5. {
  6. label: 'AB Test',
  7. key: 'ab',
  8. }]
  9. const MainLayout = () => {
  10. const {
  11. token: { colorBgContainer },
  12. } = theme.useToken();
  13. const navigate = useNavigate();
  14. const onClick = (e) => {navigate(`/${e.key}`)}
  15. return (
  16. <Layout>
  17. <Sider>
  18. <Menu
  19. mode="inline"
  20. items={items2}
  21. onClick={onClick}
  22. />
  23. </Sider>
  24. <Content>
  25. {/*在这里打开页面*/}
  26. </Content>
  27. </Layout>
  28. );
  29. };
英文:

I have a menu and the main body of the page. I have created different pages as components with some text. All I want is that when I click on the side bar menu, the components are displayed in the main page. How can I make this work?

  1. const items2 = [{
  2. label: &#39;Rice&#39;,
  3. key: &#39;rice&#39;,
  4. },
  5. {
  6. label: &#39;AB Test&#39;,
  7. key: &#39;ab&#39;,
  8. }]
  9. const MainLayout = () =&gt; {
  10. const {
  11. token: { colorBgContainer },
  12. } = theme.useToken();
  13. const navigate = useNavigate();
  14. const onClick = (e)=&gt;{navigate(`/${e.key}`)}
  15. return (
  16. &lt;Layout&gt;
  17. &lt;Sider &gt;
  18. &lt;Menu
  19. mode=&quot;inline&quot;
  20. items={items2}
  21. onClick = {onClick}
  22. /&gt;
  23. &lt;/Sider&gt;
  24. &lt;Content &gt;

//I Want to open the pages here

  1. &lt;/Content&gt;
  2. &lt;/Layout&gt;
  3. &lt;/Content&gt;

答案1

得分: 1

你需要使用react-router-dom在单击其他MenuItem时进行导航。创建你自己的RouterProvider并将其放入Content中。

  1. &lt;Content&gt;
  2. &lt;RouterProvider router={router}&gt;
  3. &lt;/Content&gt;

编辑

现在你有两种方式可以导航到你的组件。第一种是使用Link并将其设置为你的标签。

  1. {
  2. label: &lt;Link title="Rice" to="/rice"&gt;Rice&lt;/Link&gt;,
  3. key: 'rice',
  4. }

第二种方式是使用hook useNavigate

  1. const navigate = useNavigate();
  2. const onClick = (e) => {navigate(`/${e.key}`)}
  3. //添加到菜单
  4. &lt;Menu
  5. onClick={onClick}
  6. //其他属性
  7. /&gt;
英文:

You need to use react-router-dom to navigate when you click other MenuItem. Create your own RouterProvider and put it in the Content.

  1. &lt;Content&gt;
  2. &lt;RouterProvider router={router}&gt;
  3. &lt;/Content&gt;

EDIT

Now you have two way to navigate to your Component. First is using Link and set it to your label.

  1. {
  2. label: &lt;Link title=&quot;Rice&quot; to=&quot;/rice&quot;&gt;Rice&lt;/Link&gt;,
  3. key: &#39;rice&#39;,
  4. }

Second way is hook useNavigate

  1. const navigate = useNavigate();
  2. const onClick = (e)=&gt;{navigate(`/${e.key}`)}
  3. //Add to Menu
  4. &lt;Menu
  5. onClick={onClick}
  6. //other props
  7. /&gt;

答案2

得分: 1

在React中,要在一个组件内部渲染另一个组件,React提供了一个特殊的props名称children

要实现你的需求,你可以像这样做:

MainLayout.js

  1. export const MainLayout = ({children}) => {
  2. const {
  3. token: { colorBgContainer },
  4. } = theme.useToken();
  5. const navigate = useNavigate();
  6. const onClick = (e)=>{navigate(`/${e.key}`)}
  7. return (
  8. <Layout>
  9. <Sider>
  10. <Menu
  11. mode="inline"
  12. items={items2}
  13. onClick={onClick}
  14. />
  15. </Sider>
  16. <Content>
  17. {children}
  18. </Content>
  19. </Layout>
  20. )
  21. }

MainLayout.js中,你只需要在<Content>组件内部写{children}React会为你做剩下的事情,将Rice或AB或其他内容传递给你。在每个页面中,只需将<MainLayout>放在你的代码的外部顶部。

请看下面的两个示例文件。


Rice.js

  1. import MainLayout from './MainLayout';
  2. export const Rice = () => {
  3. // 在这里做一些事情...
  4. return (
  5. <MainLayout>
  6. <div>
  7. <h2>世界上最好吃的大米</h2>
  8. <ol>
  9. <li>Pinipig</li>
  10. <li>Riz de Camargue</li>
  11. ...
  12. </ol>
  13. <div>
  14. </MainLayout>
  15. )
  16. }

Corn.js

  1. import MainLayout from './MainLayout';
  2. export const Corn = () => {
  3. // 在这里做一些事情...
  4. return (
  5. <MainLayout>
  6. <div>
  7. <h2>最佳玉米配菜食谱</h2>
  8. <ol>
  9. <li>淡奶油玉米沙拉</li>
  10. <li>经典烤玉米棒</li>
  11. ...
  12. </ol>
  13. </div>
  14. </MainLayout>
  15. )
  16. }

你可以在React官方文档中阅读更多并尝试这个示例代码。

这是React的基本概念,所以在你开始构建大型项目之前,我建议你先阅读这些文档,或者找一些针对初学者的React教程系列,它们会解释React的关键概念,这样你就能节省更多时间。

英文:

To render a component inside other component, React provides a special props name children.

To achieve your requirement, you can do like this:

MainLayout.js:

  1. export const MainLayout = ({children}) =&gt; {
  2. const {
  3. token: { colorBgContainer },
  4. } = theme.useToken();
  5. const navigate = useNavigate();
  6. const onClick = (e)=&gt;{navigate(`/${e.key}`)}
  7. return (
  8. &lt;Layout&gt;
  9. &lt;Sider&gt;
  10. &lt;Menu
  11. mode=&quot;inline&quot;
  12. items={items2}
  13. onClick={onClick}
  14. /&gt;
  15. &lt;/Sider&gt;
  16. &lt;Content&gt;
  17. {children}
  18. &lt;/Content&gt;
  19. &lt;/Layout&gt;
  20. )
  21. }

In MainLayout.js, you only need to write {children} inside component &lt;Content&gt;, React will do the rest for you to pass the content of Rice or AB or whatever for you. In each page, just place &lt;MainLayout&gt; at the top of the outer of rest of your code.

Please see 2 example files below.


Rice.js:

  1. import MainLayout from &#39;./MainLayout&#39;;
  2. export const Rice = () =&gt; {
  3. // Do some stuffs here...
  4. return (
  5. &lt;MainLayout&gt;
  6. &lt;div&gt;
  7. &lt;h2&gt;Best rated rice in the World&lt;/h2&gt;
  8. &lt;ol&gt;
  9. &lt;li&gt;Pinipig&lt;/li&gt;
  10. &lt;li&gt;Riz de Camargue&lt;/li&gt;
  11. ...
  12. &lt;/ol&gt;
  13. &lt;div&gt;
  14. &lt;/MainLayout&gt;
  15. )
  16. }

Corn.js:

  1. import MainLayout from &#39;./MainLayout&#39;;
  2. export const Corn = () =&gt; {
  3. // Do some stuffs here...
  4. return (
  5. &lt;MainLayout&gt;
  6. &lt;div&gt;
  7. &lt;h2&gt;Best Corn Side Dish Recipes&lt;/h2&gt;
  8. &lt;ol&gt;
  9. &lt;li&gt;Whipped-Cream Corn Salad&lt;/li&gt;
  10. &lt;li&gt;Classic Grilled Corn on the Cob&lt;/li&gt;
  11. ...
  12. &lt;/ol&gt;
  13. &lt;div&gt;
  14. &lt;/MainLayout&gt;
  15. )
  16. }

You can read more and play around with the example code from React's official documents.

It is the basic concept of React, so before you start to build something big, I suggest to follow this docs first or find some series of React tutorials for beginner, they will explain key concepts of React so you would not save more time.

huangapple
  • 本文由 发表于 2023年2月8日 09:10:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/75380490.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定