【发布时间】:2018-04-26 23:47:44
【问题描述】:
所以这个问题更多是关于我应该采取什么方法来解决这个问题。
我有一个这样的 JSON
const app = [
{
tab: 'Home',
// content: '<div>This is home</div>',
nav: [
{
tab: 'Dashboard',
content: '<div>This is Dashboard</div>'
},
{
tab: 'Profile',
content: '<div>This is Profile</div>'
},
]
},
{
tab: 'About',
content: '<div>This is About</div>'
},
{
tab: 'Pricing',
content: '<div>This is Pricing</div>'
},
];
现在我想要的是设置整个路由和页面来呈现上述 JSON。
下面是伪代码:
方法 1...
循环并为每个导航/子导航添加路线。
import {
BrowserRouter,
Route,
NavLink,
} from 'react-router-dom';
const Page = (content) => {
return (
<div>{content}</div>
)
}
<BrowserRouter>
app.map((nav, i) =>
<NavLink key={nav.tab} to={`/${nav.tab}`} activeClassName="active">
{nav.tab}
</NavLink>
<Route
path={`/${nav.tab}`} render={(props) => (
<Page {...props} pageData={nav.content}>
if(nav.subNav) {
nav.subNav.map((subnav, i) =>
<NavLink key={subnav.tab} to={`/${nav.tab}/${subnav.tab}`} activeClassName="active">
{nav.tab}
</NavLink>
<Route
path={`/${nav.tab}/${subnav.tab}`} render={(props) => (
<Page {...props} pageData={subnav.content} />
)}
/>
)
}
</Page>
)}
/>
)
</BrowserRouter>
方法 2
这样的事情会更好/更好吗?只需 2 个路由返回相同的组件,将 app 对象传递给 Page,然后根据 URL 渲染相应的数据
const Page = (app) => {
return (
// Loop over app
if(mainNav from URL == tab) {
if(subNav from URL == tab) {
<div>{content}</div>
}
}
)
}
<BrowserRouter>
<Route
path={'/:mainNav'} render={(props) => (
<Page {...props} pageData={app} />
)}
/>
<Route
path={'/:mainNav/:subNav'} render={(props) => (
<Page {...props} pageData={app} />
)}
/>
</BrowserRouter>
感谢您的通读并感谢您的帮助。如果还有其他更好的方法,我很想知道!
【问题讨论】:
-
你解决了吗?我有完全相同的“问题”。
-
所以我所做的是......让我的所有路线都呈现相同的组件
并且所有导航信息都作为道具传递,在 内基于道具显示.... 有道理吗? -
是的!这说得通。我想以同样的方式做,但我想知道这是否是一个好的模式嘿嘿。我可能会将您的解决方案与 HOC 结合起来。谢谢!!
标签: javascript reactjs navigation react-router-v4 react-router-dom