我需要定义一个采用可选参数"格式";。最初我只定义了路线:<FleetView path='/fleet/:format' />
,但每当我转到没有格式的URL时,例如localhost:3000/fleet
或localhost:3000/fleet/
,它都会出现错误。我通过添加一个没有格式参数的额外冗余路由来修复它:<FleetView path='/fleet/' />
。工作代码如下:
const NotFound = (props) => {
return <Redirect to='/fleet' />;
}
...
<Router >
<Redirect noThrow from="/" to="/fleet" />
<FleetView path="/fleet/" />
<FleetView path="/fleet/:format" />
<NotFound default />
</Router>;
我的问题是,是否有一种方法可以在没有冗余路由的情况下做到这一点,即使:format
参数可选?
您可以使用useRouteMatch钩子以与Route
相同的方式匹配当前URL,例如
<Switch>
<Redirect from="/" to="/fleet" />
<Route path="/fleet">
<Fleet />
</Route>
<Route>
<div>Not found</div>
</Route>
</Switch>
...
function Fleet() {
const match = useRouteMatch("/fleet/:format");
if (!match) return <div>No format</div>;
return <div>format = {match.params.format}</div>;
}
因此,Switch
有一个单一的路由,它为/fleet
路径呈现Fleet
分量,但Fleet
分量与/fleet/:format
路径匹配,以获得format
参数(可能不匹配(