问题描述
通过以下内容,我可以导航到 /shop/
、/shop/dept1/
、/shop/dept2/
,并查看我希望看到的组件。
当我尝试导航到 /shop/dept1/?option=...
时,我仍然只能看到 DeptOne 组件,而不是 PLP 组件。我几乎肯定我过去做过类似的事情,但这次似乎无法复制。
<Router basepath='/shop'>
<Shop path='/' />
<DeptOne path='/dept1/' />
<DeptTwo path='/dept2/' />
<PLP path='/dept1/*' />
<PLP path='/dept2/*' />
</Router>
解决方法
URL 查询参数(? 之后的键值对)不是路径的一部分。所以对于 /shop/dept1/?option=...
,路径仍然是 /shop/dept1/
。
这意味着路径 /shop/dept1/
的组件必须处理查询参数。可以通过 location
对象在组件中访问查询参数,该对象是 Router (https://reactrouter.com/web/api/location) 的道具。
例如,您可以制作一个包装组件:
const WrapperComponent = ({ match,location }) => {
return (
<>
<DeptOne />
{location.search == ""
? null
: <PLP queryParams={location.search}>
}
</>
);
}
queryParams
属性是一个以 ? 开头的字符串。因此,如果路径为 /shop/dept1/?option=...
,则 queryParams 将为 ?option=...
。
更多信息here。