我是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
}
this.context.history.push("/path")
和this.props.history.push("/path")
。我对所有这些选项感到困惑,是否有最佳的方法来重定向页面?
实际上,这取决于您的用例。
1)您想保护您的路线免受未经授权的用户的侵害
如果是这种情况,则可以使用称为的组件,<Redirect />
并可以实现以下逻辑:
import React from 'react'
import { Redirect } from 'react-router-dom'
const ProtectedComponent = () => {
if (authFails)
return <Redirect to='/login' />
}
return <div> My Protected Component </div>
}
请记住,如果您想<Redirect />
按预期的方式工作,则应将其放在组件的render方法中,以便最终应将其视为DOM元素,否则它将无法工作。
2)您要在执行某项操作后进行重定向(例如,创建项目后)
在这种情况下,您可以使用历史记录:
myFunction() {
addSomeStuff(data).then(() => {
this.props.history.push('/path')
}).catch((error) => {
console.log(error)
})
要么
myFunction() {
addSomeStuff()
this.props.history.push('/path')
}
为了访问历史记录,您可以使用名为的HOC包装组件withRouter
。当您用它包装您的组件时,它会通过match
location
并进行history
支撑。有关更多详细信息,请参阅withRouter的官方文档。
如果你的组件是一个的子<Route />
组件,即如果是这样<Route path='/path' component={myComponent} />
,你不必换用您的组件withRouter
,因为<Route />
传球match
,location
和history
它的孩子。
3)单击某些元素后重定向
这里有两个选择。您可以history.push()
通过将其传递给onClick
事件来使用:
<div onClick={this.props.history.push('/path')}> some stuff </div>
或者您可以使用一个<Link />
组件:
<Link to='/path' > some stuff </Link>
我认为这种情况的经验法则是首先尝试使用<Link />
,我想尤其是因为性能。
我是React Router的新手,我了解到有很多方法可以重定向页面: 在React Router v4中,有和。详细说明:如何在React路由器V4中推到历史? 我被所有这些选项弄糊涂了,有没有一个最好的方法来重定向一个页面?
问题内容: 任何人都可以建议我使用以下两种方法中使用REST重定向URL的最佳方法: 问题答案: 重定向有多种形式。该HTTP状态代码系列包含: 这些和其他代码具有不同的语义。正确的选择取决于您的情况。资源是否已永久移动到新位置?还是重定向只是临时的?
问题内容: 从Symfony2.3安全文档: 如果访问被拒绝, 则系统将尝试对用户进行身份验证(如果尚未进行身份验证)(例如,将用户重定向到登录页面) 。如果用户已经登录,将显示403“访问被拒绝”错误页面。有关更多信息,请参见如何自定义错误页面。 我目前在一条路线上使用一条规则。如果匿名用户被重定向到登录路由,我想通过一条消息“ 您必须登录才能访问该页面 ” 来通知他们。我已经阅读了几次安全性文
问题内容: 背景 我有很多字段,这些字段将通过外部进程实时更新。我想定期更新Flask托管页面,以向连接的用户显示任何更改。理想情况下,整个页面不会刷新,这是对类似系统的抱怨,而只是更新页面上的许多字段。 当前方向 我目前的想法是使用可能的JavaScript来处理此问题,但是我不确定使用Flask时是否甚至可以实现。 Flask或第3方模块是否可以实现此目的? 其他信息 数据将使用各种套接字和串
问题内容: 我有mongodb和NodeJs。通过mongoosejs完成连接。 开发Ajax Infinity滚动的最佳方法是什么?我应该使用极限和偏移量吗? 问题答案: 当您对数据集进行分页时,“跳过并限制”方法不是很有效。它实际上是Shlemiel Painter的算法 。 范围查询效率更高(当索引支持时)。例如,假设您正在显示推文。您的页面大小是20,您在第1000页上,并且想要加载第10
问题内容: 最好的说,我是最高效的,现在我唯一想到的就是将其放在我的post.php文件中: 有没有更好的方法,那就是消耗更少服务器资源的方法。我问,因为如果这是一个小型应用程序,那么我在上面没有问题,但是我正在尝试构建一些将被许多人使用的东西,并且我希望尽可能地了解查询。 问题答案: 如果您有兴趣节省资源并仍然使用SQL进行报告,而精确的#值无关紧要,则可以尝试这样采样(修改采样率以适合您的规模