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
  }
}