因此,我正在创建一个具有下拉菜单的边栏,但无法弄清楚如何为子菜单创建显示页面或填充页面。
这是我的示例数据文件
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上显示数据/子数据,但是我不知道如何创建子菜单数据页并实际在屏幕上直观地显示它?
你需要(使用<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() {}
这种方法与React Router在其中进行
data/:id
for链接的方法有什么区别?使用路由参数(
:id
),您可以将数据从URL传递到呈现的组件,但仅使用一个组件。因此,您可能会喜欢customers/:id
,只有CustomerDetail
组件会呈现,但随后会知道要为其获取数据的客户的ID。如果需要,您可以在此处使用该方法,尽管它有点不标准,因为那样您就可以控制通过常规的React条件渲染来渲染哪个子页面组件,而不是使用内置的React Router功能。因此,就文件夹结构而言,即使它位于
/data/
路径下,我仍然需要正确创建一个新的.js文件吗?因此,在我的页面文件夹中,我将有3个单独的文件,每个文件分别命名为Data.js,Subdata.js,Subdata2.js等。我说的是path="/subdata"
什么路径?还是仅仅是页面组织结构将与数据相关的内容保留在路径内/data/subdata
?组件不一定需要放置在自己的文件/文件夹中,但是这对组织很有帮助。同样,这样做的原因
/data/subdata
仅取决于您在问题中的路线安排方式,但这完全取决于您,尽管如果内容看起来像是属于主要/data
路线,那么我会保留在那里。但是,如果您只是建立路径/subdata
,则组件可能不应该嵌套在该Data
组件下,如我在第二种方法中所展示的那样(这种方式仅对子路由有意义)。我最终弄清楚了。我只是导出const SubData =()=> {}