Reactjs 在React中,呈现重定向是否总是比使用this.props.history.push更好?

Reactjs 在React中,呈现重定向是否总是比使用this.props.history.push更好?,reactjs,redirect,react-router,Reactjs,Redirect,React Router,如果我总是重定向到应用内路由,react router dom(v4)中的重定向组件和this.props.history.push()之间有什么区别 例如,假设我想将用户给定的标题添加到URL中,并从/foo/123重定向到/foo/123/某些标题(两者都使用相同的路由/组件呈现) 我看到了重定向传入状态的一些用法。这会在哪里结束 在状态中指定要重定向到的位置是否为反模式?为什么示例代码不是这样的: save() { this.setState({ redir: '/new-path';

如果我总是重定向到应用内路由,react router dom(v4)中的
重定向
组件和
this.props.history.push()之间有什么区别

例如,假设我想将用户给定的标题添加到URL中,并从
/foo/123
重定向到
/foo/123/某些标题
(两者都使用相同的路由/组件呈现)

我看到了
重定向
传入状态的一些用法。这会在哪里结束

在状态中指定要重定向到的位置是否为反模式?为什么示例代码不是这样的:

save() {
  this.setState({ redir: '/new-path'; });
}
...
render () {
  if (this.state.redir) {
    return <Redirect to={this.state.redir} />;
  }
  ...
}
save(){
this.setState({redir:'/new path';});
}
...
渲染(){
if(this.state.redir){
返回;
}
...
}

我是一个严厉反对呈现重定向的人,因为为了更改页面,必须呈现组件有点违反直觉,但它确实提供了一些明显的好处

因此,
this.props.history.push()的问题主要是在处理触发重定向的子组件时

Component A # the one Rendered by the Route
  Component B
    Component C # the one triggering the redirect
在上面的示例中,除非您努力将路线道具从
组件A
传递到
组件C
,否则您将无法在
组件C
中使用
history.push()

渲染
重定向
应该是react router的维护人员提供的解决方案,但有些人根本不喜欢这个想法(包括我)



从功能上讲,
Redirect
history在功能上似乎没有太大区别。按一下,因为Redirect在引擎盖下使用它。在历史上使用重定向。推送的主要原因是,重定向是未来的证明,不受历史如何工作的可能变化的影响,或者如果它们决定在以后以不同的方式处理上下文。

通过使用
withRouter
包装组件,您可以在任何级别访问路由器道具hierarchy@ShubhamKhatri是的,只要将
与路由器一起用作HOC的组件将历史仅用于推送,就不应该存在问题。在我的例子中,我尝试从使用路由器
的组件访问
匹配
,但我没有得到我想要的结果,所以重定向使用历史。推到引擎盖下?理想情况下,我想知道行为差异。文档根本不提及状态。是的,
Redirect
使用
history。将
推到引擎盖下。除了
重定向
可以通过对
上下文
历史
对象可能或可能在以后发生的任何更改进行未来验证之外,我看不到两者之间有任何重大的行为差异