Javascript 更改构造函数中的“window.location”在重定向之前仍将首先呈现组件
组件需要检查cookie,如果它经过身份验证,那么组件将被呈现,否则它将使用下面的代码将页面重定向到外部URL。我在组件构造函数方法中更改URLJavascript 更改构造函数中的“window.location”在重定向之前仍将首先呈现组件,javascript,reactjs,react-router,Javascript,Reactjs,React Router,组件需要检查cookie,如果它经过身份验证,那么组件将被呈现,否则它将使用下面的代码将页面重定向到外部URL。我在组件构造函数方法中更改URL window.location = '/external-location' 但是,组件将首先呈现,然后页面被重定向到外部路径。有没有办法避免组件的初始呈现?您可以使用componetWillMount。然后,您可以设置一个标志并检查该标志,以停止组件在渲染功能中的渲染。您有一个状态使用它 我们可以在第一次调用render时将“Nothing”(nu
window.location = '/external-location'
但是,组件将首先呈现,然后页面被重定向到外部路径。有没有办法避免组件的初始呈现?您可以使用
componetWillMount
。然后,您可以设置一个标志并检查该标志,以停止组件在渲染
功能中的渲染。您有一个状态
使用它我们可以在第一次调用
render
时将“Nothing”(null
)呈现给DOM
。在构造函数中,您可以检查您的条件并将其存储在
状态
中,这当然会影响第一次渲染。然后在
componentDidMount
上检查是否需要重定向和更新状态(如果需要)
下面是两个代码相同的示例,当然,只有shouldRedirect
的初始值发生了更改
应呈现页面示例:
类应用程序扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
shouldRender:false,
shouldRedirect:false//检查你的coockie
};
}
componentDidMount(){
const{shouldRedirect}=this.state;
如果(应该重定向){
window.location=”https://google.com/";
}否则{
this.setState({shouldRender:true});
}
}
render(){
const{shouldRender}=this.state;
返回shouldRender&&I'm render!;
}
}
ReactDOM.render(,document.getElementById('root'))代码>
尝试在组件构造函数中抛出(window.location='/401or403')
这是正确的方法吗?对我来说似乎是一种黑客行为。停止组件渲染通常是在render
函数中完成的。如果您遵循容器和表示组件模式,这正是在数据可用之前停止安装表示组件的方式。检查是否需要重定向最好在componentWillMount
中完成,而不是在构造函数中完成,但是,如果要使用标志,也可以在componentDidMount
中完成。因为在我的例子中,逻辑稍微复杂一些。呈现的组件实际上不是包含重定向(外部URL)代码的组件,而是负责另一个应用程序内保护/检查的另一个组件。@squgeim如果你是错误的和误导性的,你不应该使用组件willmount
而不是构造函数
,相反。阅读react文档,建议不要使用它,而是使用构造函数
:@Sag1v因为检查重定向是同步的,所以可以在componentWillMount
中设置组件是否呈现的标志。该标志甚至不需要是一个状态,因为检查是同步的。关于在哪里使用构造函数
或组件将挂载
,存在一些争论,但我同意你的看法。这是另一种黑客行为吗?似乎你想从组件挂载阶段完全跳过“render()”,而官方文档没有提到这样做的方法,所以你可以称之为黑客行为。顺便说一下,窗口。位置
没有阻塞。