我在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??
根据我的经验,我了解到在箭头函数(即以ES6格式编写的函数)内调用setState会反复导致此错误。因此,我尽可能多地开始仅使用ES5格式函数。
我认为这是因为你正在调用this.props.dispatch(userActions.logout());在你的构造函数中,这不是一个更新应用程序状态的好地方,因为这将使组件在安装之前重新渲染,每次它想要重新渲染时,你都会再次调用其构造函数中的函数并设置状态,这样它就会进入一个循环,一次又一次地调用setState,最好把this.props.dispatch(userActions.logout());在一个生命周期方法中,比如组件安装(){},所以每次你的组件安装时,你的注销操作都会被调用并更新应用程序状态。
你可能不会相信我,但我通过更改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限制嵌套更新的数量以防止无限循环。我能做些什么来解决这个问题?