+-
在Reactjs路由中,页面正在合并?

我在Reactjs应用的路径选择上遇到了一个问题,我需要两个准确的路径。

1.  path = /user/
2. path = /user/setting

当我调用第二个路径时,它显示的是两个组件的合并页面。

   <Route path='/user/:param1'   component={routeProps => <MyTab {...routeProps} remotes={remotes} />}/>
    <Route path='/(user/settings)/:param1'   component={UserSettings}/>
1
投票

你可以写一个开关组件包装的路由,并重新排序,使第一个匹配的路由被呈现。

<Switch>
    <Route path='/(user/settings)/:param1'   component={UserSettings}/>
    <Route path='/user/:param1'   component={routeProps => <MyTab {...routeProps} remotes={remotes} />}/>
</Switch>

你看到当前行为的原因是 '/(user/settings)/:param1' 也符合 '/user/:param1' 哪儿 params 将是 settings 因为我们并没有检查是否完全匹配,所以两条路线都会被渲染成

在Switch内部重新排序路由,将确保如果 /user/settings/:param1 匹配,其余的路由则不匹配。如果你不重新排序,则 '/user/:param1' 途径将被匹配为 /user/settings/:param1 而UserSettings组件将永远不会被呈现。

你可以简单地在两条路线上使用精确的关键字,如

<Route exact path='/user/:param1'   component={routeProps => <MyTab {...routeProps} remotes={remotes} />}/>
<Route exact path='/(user/settings)/:param1'   component={UserSettings}/>

但是,如果你这样做,你将无法在MyTab或UserSettings组件中编写任何嵌套路由。

2
投票

正如舒巴姆所解释的那样。/(user/settings)/:param1 路径匹配 /user/:param1. 你可以做的是在你的网站上添加 exact props,将其设置为 true。

<Route exact path='/user/:param1'   component={routeProps => <MyTab {...routeProps} remotes={remotes} />}/>
<Route exact path='/(user/settings)/:param1'   component={UserSettings}/>

这将禁用路由的部分匹配,确保在路径完全匹配的情况下返回路由。