我是 React Router 的新手,我了解到重定向页面的方法有很多:
- 使用
browserHistory.push("/path")
import { browserHistory } from 'react-router';
//do something...
browserHistory.push("/path");
- 使用
this.context.router.push("/path")
class Foo extends React.Component {
constructor(props, context) {
super(props, context);
//do something...
}
redirect() {
this.context.router.push("/path")
}
}
Foo.contextTypes = {
router: React.PropTypes.object
}
- 在 React Router v4 中,有
this.context.history.push("/path")
和this.props.history.push("/path")
。详细信息: 如何在 React Router v4 中推送到历史记录?
我对所有这些选项感到很困惑,是否有重定向页面的最佳方法?
原文由 Liutong Chen 发布,翻译遵循 CC BY-SA 4.0 许可协议
实际上,这取决于您的用例。
1)您想保护您的路线免受未经授权的用户的侵害
如果是这种情况,您可以使用名为
<Redirect />
的组件并可以实现以下逻辑:请记住,如果您希望
<Redirect />
以您期望的方式工作,您应该将它放在组件的渲染方法中,以便最终将其视为 DOM 元素,否则它将无法工作。2)你想在某个动作之后重定向(比如说在创建一个项目之后)
在这种情况下,您可以使用历史记录:
或者
为了访问历史记录,您可以使用名为
withRouter
的 HOC 包装您的组件。当你用它包装你的组件时,它会传递match
location
和history
道具。有关更多详细信息,请查看 withRouter 的官方文档。如果您的组件是
<Route />
组件的子组件,即如果它类似于<Route path='/path' component={myComponent} />
,您不必用withRouter
包装您的组件,因为<Route />
传递match
,location
和history
给它的孩子。3)单击某些元素后重定向
这里有两个选项。您可以使用
history.push()
将其传递给onClick
事件:或者您可以使用
<Link />
组件:我认为这种情况下的经验法则是首先尝试使用
<Link />
,我想尤其是因为性能。