reactjs - Redux 路由更改路径但不渲染新页面
问题描述
一切正常,直到我用一些额外的值和要求更新了路线(在下面的示例中称它们为:键和可选)。当我单击按钮转到新页面时,它会更改路径 URL(在浏览器中),但它会保持在同一页面(MainPage)上,没有错误,也不会转到NewPage或TestSite。我已经包含withRouter
在页面上。任何想法如何解决这个问题?谢谢!
<Router>
<Switch>
<Route exact path='/:Key/:optional?' render={(props) => <MainPage key={props.match.params.key} optional={props.match.params.optional} />} />
<Route exact path='/NewPage/:Key/:optional?' render={(props) => <NewPage />} />
<Route exact path='/TestSite' render={(props) => <TestSite/>} />
</Switch>
</Router>
使成为()
<Link to="/NewPage/Key"><button className="btn btn-warning">Open New Page</button></Link>
<Link to="/TestSite"><div className="btn btn-success">Open Test Page</div></Link>
解决方案
如果我正确理解了情况,那么我认为解决方案是像这样更改<Route />
组件的顺序<Switch />
:
<Router>
<Switch>
{/* Set this route as the first in the switch /*}
<Route exact path='/NewPage/:Key/:optional?' render={(props) => <NewPage />} />
<Route exact path='/TestSite' render={(props) => <TestSite/>} />
{/* Set this route as last in the switch /*}
<Route exact path='/:Key/:optional?' render={(props) => <MainPage key={props.match.params.key} optional={props.match.params.optional} />} />
</Switch>
</Router>
原因是路由优先级基于在交换机中定义路由的顺序。
因此,当您使用 导航时<Link to="/NewPage/Key">
,NewPage
部分路线将匹配:Key
,Key
部分路线将匹配:optional?
。通过如图所示重新排序路由,这应该会<NewPage />
显示预期的组件<Link to="/NewPage/Key">
。
希望有帮助!
推荐阅读
- reflection - 获取可为空类型的类
- javascript - idx 在 idx.js 中是什么意思
- python - Spark DataFrame 聚合:windows + 分区与 groupBy 操作
- encryption - 在 mule 中使用多个密钥的 PGP 加密
- javascript - 更改表单 ID 并使用按钮提交事件触发旧提交 ID
- c# - 预计读取 4 个标头字节,但仅收到 0
- c# - 在调用 ShowDialog 之前进行验证
- google-sheets - 将活动单元格的行号存储在变量中,切换到另一张表,将存储的数字放入单元格 I3,结束宏
- python - 如何在 OSX 上卸载所有 Python 2.7 包(不卸载 Python)?
- html - HTML5 视频标签是否有“异步”模式?