React Router this.context.router.push 不会重新挂载组件

Posted

技术标签:

【中文标题】React Router this.context.router.push 不会重新挂载组件【英文标题】:React Router this.context.router.push does not remount the component 【发布时间】:2016-05-14 19:09:42 【问题描述】:

我们有一个点击处理程序,它使用反应路由器 2.0 this.context.router.push() 更新 url。见下文:

selectRelatedJob(slug) 
  JobActionCreators.fetchJobPage(slug);
  JobsActionCreators.getRelatedJobs('sl': slug);
  this.context.router.push(pathname: '/job', query: sl: slug);

我们的目标是根据“sl”查询字符串获取新数据,但没有调用我们的 componentWillMount() 方法,因为我们将 url 更新到相同的路径 --- 只是一个不同的查询字符串。相反,正在调用更新生命周期方法。我们当前的方法是调用动作创建者直接在点击处理程序中获取数据。然而,这似乎是多余的和 hacky,因为我们已经更新了 url。理想情况下,组件会被卸载并重新安装。

这里是嵌套路由:

<Route component=App>
  <Route path="/" component=HomePage/>
    <Route path="job" component=JobPage/>
    <Route path="job/" component=JobPage/>
  </Route>
</Route>

使用不同的查询字符串导航到当前 url 的最佳案例是什么?

【问题讨论】:

为什么要卸载它?您应该可以在componentWillReceiveProps() 中调用动作创建者 因此,您建议检查componentWillReceiveProps() 以确定当前和下一个查询字符串是否相等,如果不相等,则调用操作创建者? 没错!访问查询字符串github.com/rackt/react-router/blob/master/examples/query-params/…示例 【参考方案1】:

传入不同的组件。

<Route path="job/:id" component=JobDetailPage />

【讨论】:

以上是关于React Router this.context.router.push 不会重新挂载组件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-router v1.0.0 中填充 this.props.params?

react-router 不维护查询参数,调用 onEnter 两次

使用 React 路由器以编程方式导航

使用 React 路由器以编程方式导航

路由问题:尝试重新路由时未定义 this.context.router

推送新 URL 时多次调用 React 组件渲染