Warm tip: This article is reproduced from serverfault.com, please click

reactjs-React如何用React Router创建子页面来显示?

(reactjs - React how to create sub pages with react router to display?)

发布于 2020-11-28 01:54:51

因此,我正在创建一个具有下拉菜单的边栏,但无法弄清楚如何为子菜单创建显示页面或填充页面。

这是我的示例数据文件

 const dropdownData = [
      {
         title: "Data',
         path: '/data',
         dropdownItems: [
          {
            title: 'Sub Data',
            path: '/data/subdata',
           },
           {
             title: 'Sub Data 2',
            path: '/data/subdata2',
           },
         ]
       }
     

因此,在我的App.js中,我通常只会在一页上执行此操作

   <Router>
    <Sidebar />
    <Switch>
      <Route path='/data' component={Data} />
    </Switch>
  </Router>

然后,我用Data.js页面创建一个页面文件夹,并仅显示如下填充文本

      import React from 'react';

      function Data() {
        return (
          <div className='data'>
            <h1>Data Page</h1>
          </div>
        );
      }

      export default Data;

因此,如果我单击数据菜单链接,它将仅显示"Data page"在屏幕上。

但是我不知道如何显示子菜单的“假”预览页面?

理想情况下, "This is the sub data page"

我已经看过使用示例,:id但是我不知道如何在视觉上显示它?

     <Route path='/data/:id' component={Data} />

如果链接到我的“数据”页面,我不知道如何生成一个新页面?

现在,我只是链接到我的路径

  <Link to={item.path}> 

当我单击子菜单时,它会在URL上显示数据/子数据,但是我不知道如何创建子菜单数据页并实际在屏幕上直观地显示它?

Questioner
Johnxr
Viewed
11
Henry Woody 2020-11-28 10:24:59

你需要(使用<Route>创建到子页面的路线你可以通过以下两种方式之一来执行此操作。你可以<Route>在现有的旁边创建其他<Route>"/data"并为基础数据路由提供exact支持。或者,你可以在Data组件中嵌套数据子页面的路由,并拆分出单独的数据“主页”组件。

两者都包含相同的主要思想,但是它们的组织方式不同,从长远来看,第二种方法更好地管理和扩展你的应用程序。

第一种方法

<Router>
  <Sidebar />
    <Switch>
      <Route exact path='/data' component={Data} />
      <Route path='/data/subdata' component={SubData} />
      <Route path='/data/subdata2' component={SubData2} />
    </Switch>
</Router>

第二种方法(按原样保留顶级路由并更新你的Data组件,使其看起来像这样):

function Data() {
  return (
    <Switch>
      <Route exact path="/data" component={ DataHome }/>
      <Route path="/data/subdata" component={ SubData }/>
      <Route path="/data/subdata2" component={ SubData2 }/>
    </Switch>
  );
}

export default Data;


function DataHome() {
  return (
    <div className='data'>
      <h1>Data Page</h1>
    </div>
  );
}

function SubData() {}

function SubData2() {}