当前位置: 首页 > 知识库问答 >
问题:

React超出最大更新深度

宁浩博
2023-03-14

我在React中运行我的应用程序时收到一个错误。这个错误有很多问题,但我不知道如何解决它。当我按下链接时,它会指向登录组件。“http://localhost:3000/login”

这是我在网站上得到的错误:

“已超出最大更新深度。当组件重复调用组件内部的 setState 时,可能会发生这种情况“组件将更新”或“组件更新”。React 限制了嵌套更新的数量,以防止无限循环

这是我的登录页面:

class LoginPage extends React.Component {
    constructor(props) {
        super(props);

        // reset login status
        this.props.dispatch(userActions.logout());

        this.state = {
            username: '',
            password: '',
            submitted: false
        };
    }

    render() {
        return (
            <div className="col-md-6 col-md-offset-3">
                <h2>Login</h2>
            </div>
        );
    }
}

function mapStateToProps(state) {
    return { auth: state.auth };
}
const loginComp = connect(mapStateToProps)(LoginPage);
export { loginComp as LoginPage }; 

这是路由部分。

render() {
  const { alert } = this.props;
  return (

  <Router history={history} >
    <Switch>
      <PrivateRoute path="/" name="Home" component={DefaultLayout} />
      <Route exact path="/login" component={LoginPage} />
    </Switch>
  </Router>
  );
}

这个是默认布局:

import React, { Component } from 'react';
import { Redirect, Route, Switch } from 'react-router-dom';
import { Container } from 'reactstrap';

import {
  AppAside,
  AppBreadcrumb,
  AppFooter,
  AppHeader,
  AppSidebar,
  AppSidebarFooter,
  AppSidebarForm,
  AppSidebarHeader,
  AppSidebarMinimizer,
  AppSidebarNav,
} from '@coreui/react';
// sidebar nav config
import navigation from '../../_nav';
// routes config
import routes from '../../routes';
import DefaultAside from './DefaultAside';
import DefaultFooter from './DefaultFooter';
import DefaultHeader from './DefaultHeader';

class DefaultLayout extends Component {
  render() {
    return (
      <div className="app">
        <AppHeader fixed>
          <DefaultHeader />
        </AppHeader>
        <div className="app-body">
          <AppSidebar fixed display="lg">
            <AppSidebarHeader />
            <AppSidebarForm />
            <AppSidebarNav navConfig={navigation} {...this.props} />
            <AppSidebarFooter />
            <AppSidebarMinimizer />
          </AppSidebar>
          <main className="main">
            <AppBreadcrumb appRoutes={routes}/>
            <Container fluid>
              <Switch>
                {routes.map((route, idx) => {
                    return route.component ? (<Route key={idx} path={route.path} exact={route.exact} name={route.name} render={props => (
                        <route.component {...props} />
                      )} />)
                      : (null);
                  },
                )}
                <Redirect from="/" to="/dashboard" />
              </Switch>
            </Container>
          </main>
          <AppAside fixed hidden>
            <DefaultAside />
          </AppAside>
        </div>
        <AppFooter>
          <DefaultFooter />
        </AppFooter>
      </div>
    );
  }
}

export default DefaultLayout;

问题可能出在别的地方,而不是这个jsx??

共有3个答案

瞿健
2023-03-14

根据我的经验,我了解到在箭头函数(即以ES6格式编写的函数)内调用setState会反复导致此错误。因此,我尽可能多地开始仅使用ES5格式函数。

阙阳夏
2023-03-14

我认为这是因为你正在调用this.props.dispatch(userActions.logout());在你的构造函数中,这不是一个更新应用程序状态的好地方,因为这将使组件在安装之前重新渲染,每次它想要重新渲染时,你都会再次调用其构造函数中的函数并设置状态,这样它就会进入一个循环,一次又一次地调用setState,最好把this.props.dispatch(userActions.logout());在一个生命周期方法中,比如组件安装(){},所以每次你的组件安装时,你的注销操作都会被调用并更新应用程序状态。

佟阳焱
2023-03-14

你可能不会相信我,但我通过更改Route标签的顺序解决了这个问题。第一个是带有路径“/login”的标签,它可以正常工作。

 类似资料:
  • 我遇到一个错误: 超过了最大更新深度。当组件重复调用componentWillUpdate或componentDidUpdate内部的setState时,会发生这种情况。React限制嵌套更新的数量,以防止无限循环。 我的代码是: 我有另一个使用路由器切换页面的组件,以及一个包含登录页面的邮件组件。

  • 我有以下组件:- 我得到了错误:- 我怀疑它必须对多次调用setState的Submit按钮(onClick)做一些事情,但是我似乎无法解决问题。 因此,我有以下问题:- 如何修复点击()? 我想点击开始游戏按钮,然后触发 并 这样我就可以填满套牌,套牌1和套牌2。有没有办法做到这一点?目前,我已经创建了一个这取决于正在填充的甲板,这是用钩子做的正确方法吗? 谢谢你的帮助和时间!

  • 我正在使用react with redux构建带有后端passport jwt的登录身份验证系统。 登录之前工作正常,我已经添加了私人路由到一些需要身份验证的路由。 我得到的错误: src/actions/authoctions.js SRC/减速机/AuthReducers.js App.js src/组件/login.js privaterout.js组件 请帮我解决这个错误。

  • 我有这个错误,以前也没有过:这是错误的图像“不变量冲突:超过最大更新深度”。当组件在componentWillUpdate或componentDidUpdate内重复调用setState时,可能会发生这种情况。React限制嵌套更新的数量,以防止无限循环。 此错误位于:Connect中(位于LoginForm.js:75) 我不知道为什么是错误,有人能帮忙吗? 这是我的代码:

  • 尝试在基本应用程序中包含 react-table,该应用程序在字段中接受输入,在字段内容更改时将其存储在组件状态中,然后在按下按钮时从 Github 获取数据。 在我加上线之前一切正常 该页面可以正常加载,但是当输入字段改变时(即你在其中输入),应用程序崩溃并显示错误: 错误:超过了最大更新深度。当组件重复调用componentWillUpdate或componentDidUpdate内部的set

  • const[number, setNum]=useState(0);当我想添加和更改它时,我收到了这个错误(setNum(number 1))。我的错误:超过了最大更新深度。当组件在组件WillUpdate或组件DiUpdate中重复调用setState时,可能会发生这种情况。React限制嵌套更新的数量以防止无限循环。我能做些什么来解决这个问题?