React Route没有获取网址更改

时间:2018-04-06 11:43:27

标签: reactjs react-router

我有这样的事情:

<Route path="/route/:param" component={DealContainer} />

然后在安装组件时,我正在进行客户端重定向:

componentWillMount() {
  if (this.props.match.params.param != 'desired_one') {
    this.props.history.push('/route/desired_one');

尽管url更改了组件没有重新安装...... 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您应该使用&#34; react-router-dom&#34;中的 Redirect 组件来解决此问题。封装

<Route exact path="/route" component={DealContainer} />
<Route
  exact
  path="/route/desired"
  render={() => <Redirect to="/route/desiredRedirectLocation" />}
/>
<Route path="/route/:param" component={DealContainer} />

此实施应该:

  • 正确匹配确切的基本路线,而不匹配任何道具。假设您要显示项目列表(例如/ products)
  • 匹配要重定向的所需项目(例如产品/汽车)并将其重定向到所需位置,让我们说产品/马
  • 匹配您不想重定向/ products /:id的任何其他案例,并正确地获取您在匹配对象内的道具。

<强>解释

history.push的问题在于,React会发现你正在使用相同的组件,并且只会更新差异,而不会实际重新安装已经安装的组件。

另一方面,我的重定向示例将拦截您要重定向的路由而不先安装组件,因此在重定向发生后将安装组件,正确执行您需要的操作。