小编典典

在React中,渲染重定向总是比使用this.props.history.push更好吗?

reactjs

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

例如,假设我要向URL添加用户指定的标题,然后从重定向/foo/123/foo/123/some-title(均使用相同的Route
/组件呈现)。

我看到Redirect传递状态有一些用途。最终到哪里去?

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

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

阅读 768

收藏
2020-07-22

共1个答案

小编典典

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

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

Component A # the one Rendered by the Route
  Component B
    Component C # the one triggering the redirect

在上面的示例中,除非您努力将路线道具从Component Adown传递到Component C,否则您将无法history.push()Component C

渲染Redirect应该是由React-router的维护者提供的那种方案的答案,但是有些人根本不喜欢这个想法(包括我)。


从功能上讲,Redirect
在幕后使用该功能时,似乎在功能上Redirect并没有重大区别history.push。在History.push上使用Redirect的主要原因是,Redirect在将来会受到历史记录工作方式可能发生的变化或将来是否决定以不同的方式处理上下文的证明。

2020-07-22