【发布时间】:2021-07-16 16:57:48
【问题描述】:
我是 react.js 的新手,现在我使用 antd 和 react-router-dom 来启动我的页面。
这里遇到了一个与react-router-dom相关的问题,路由器的结构如下图所示:
-Home
-Member
----MemberIquire
----MemberExamine
-Charge
----Investor
-------InvestorIncome
-------InvestorExpense
映射路径是:
-(path: / )
-(path: /memebers )
----(path: /memebers/memberinquire )
----(path: /memebers/memberinquire )
-(path: /charge )
----(path: /charge/investor )
-------(path: /charge/investor/investorIncome )
-------(path: /charge/investor/investorExpense )
这是我的代码:
/// main.jsx
<Router>
<Layout className={styles["homepage-main"]}>
<SideMenu />
<Layout>
<HeaderComponent />
<Content className={styles["homepage-content"]}>
<Route path="/dashboard" component={DashBoard}></Route>
<Route
path="/members/memberInquire"
component={MembersInquire}
></Route>
<Route
path="/members/memberExamine"
component={MembersExamine}
></Route>
</Content>
</Layout>
</Layout>
</Router>
/// sideMenu.jsx
{menus.map((menu) => {
if (!menu.subMenu) {
// only first level
return (
<Item key={menu.key}>
<Link to={`${menu.path}`}> {menu.name} </Link>
</Item>
);
} else {
// if it has second level
return (
<SubMenu key={menu.key} title={menu.name}>
{menu.subMenu.map((s) => {
// only second level
if (!s.sunMenu) {
return (
<Item key={s.key}>
<Link to={`${menu.path}${s.path}`}> {s.name} </Link>
</Item>
);
}
// if it has third level
else {
return (
<SubMenu key={s.key} title={s.name}>
{s.sunMenu.map((ss) => {
return (
<Item key={ss.key}>
<Link to={`${menu.path}/${s.path}/${ss.path}`}>
{ss.name}
</Link>
</Item>
);
})}
</SubMenu>
);
}
})}
</SubMenu>
);
}
})}
我参考了 react-router-dom 官方的嵌套示例,在 Topic 函数组件中使用了let { path, url } = useRouteMatch();。
但就我而言,Members 只是打开其子组件 (MemberIquire/MemberExamine) 的下拉菜单,这意味着没有 Members 的组件,如果按照我的代码操作,它将始终添加 members当我点击 MemberIquire 或 MemberExamine 的链接时进入 URL,所以它会变成http://localhost:3002/#/members/members/members/members/memberExamine
点击时我的愿望是http://localhost:3002/#/members/memberExamine 或http://localhost:3002/#/members/memberIquire。
请有人帮助我实现这个目标。 如果对这个话题有任何混淆,请告诉我,我会解释它。
【问题讨论】:
标签: javascript reactjs nested react-router-dom