Javascript ReactJs:错误:超出最大更新深度。React限制嵌套更新的数量以防止无限循环
每当我添加Javascript ReactJs:错误:超出最大更新深度。React限制嵌套更新的数量以防止无限循环,javascript,reactjs,Javascript,Reactjs,每当我添加if(IsLogged()){…}块时,我都会遇到这个错误 超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate内重复调用setState时,可能会发生这种情况。 React限制嵌套更新的数量以防止无限循环 我在这里读过其他类似的问题,但我无法理解我做错了什么 我是一个新手,所以请容忍我 render() { if (IsLogged()) { return <Redirect to="/"
if(IsLogged()){…}
块时,我都会遇到这个错误
超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate内重复调用setState时,可能会发生这种情况。
React限制嵌套更新的数量以防止无限循环
我在这里读过其他类似的问题,但我无法理解我做错了什么
我是一个新手,所以请容忍我
render() {
if (IsLogged()) {
return <Redirect to="/" />;
}
return (
<Grid
textAlign="center"
style={{ height: "75vh" }}
verticalAlign="middle"
>
<Grid.Column style={{ maxWidth: 450 }} columns={2}>
<Segment>
<Grid.Row>
<Header as="h1" color="teal" textAlign="center">
Log In
</Header>
</Grid.Row>
<Form
onSubmit={this.submitLogin}
style={{ paddingTop: "1rem" }}
>
<Form.Input
icon="mail"
iconPosition="left"
placeholder="Email"
fluid
value={this.state.email}
onChange={(e) =>
this.setState({ email: e.target.value })
}
/>
<Form.Input
icon="lock"
iconPosition="left"
fluid
placeholder="Password"
type="password"
value={this.state.password}
onChange={(e) =>
this.setState({
password: e.target.value,
})
}
/>
<Button color="teal" fluid size="large">
Log In
</Button>
</Form>
<Grid.Row style={{ paddingTop: "1rem" }}>
<div style={{ marginTop: "1rem" }}>
Not Singed In Yet?
<Link to="/signup">Sign Up</Link>
</div>
</Grid.Row>
</Segment>
</Grid.Column>
</Grid>
);
在渲染块中使用
setState()
时也可能发生此错误,然后它会导致无限重渲染。isLogged()函数中有什么?最可能的情况是,您应该检查用户是否使用true/false变量登录,也不要在渲染块中执行函数,这可能会导致无限循环我不确定您的IsLogeed方法是什么?但是试试
if (!IsLogged()) {
return <Redirect to="/" />;
}
if(!IsLogged()){
返回;
}
尝试将onChange
处理程序更改为包含e.preventDefault()代码>
这个问题似乎与重定向有关。然而,为了解决这个问题,我们需要更多关于组件结构和路由处理方式的信息。如果可能的话,发布IsLogged
函数的代码尝试发布所有相关代码(没有敏感内容)因此,读者可以轻松理解代码,而无需假设。@ShanakaRusith我想我解决了这个问题。您可以看到,在删除IsLogged函数中的多个检查后,它开始正确重定向。但我仍然不明白为什么会发生这种情况?你在主页上呈现这个组件吗?如果您这样做,我想这个
可能每次都会呈现,并尝试一次又一次地重定向到主页。
if (!IsLogged()) {
return <Redirect to="/" />;
}
onChange={(e) => {
e.preventDefault();
// setState here
}
}