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

×超过最大更新深度

邹修真
2023-03-14

超过了最大更新深度。当组件重复调用组件WillUpdate或组件DidUpdate中的setState时,可能会发生这种情况。React限制嵌套更新的数量以防止无限循环。

这是bossinfo.js

import React from 'react';
import { NavBar, InputItem, TextareaItem, Button } from 'antd-mobile';
import {connect} from 'react-redux';
import {Redirect} from 'react-router-dom';
import AvatarSelector from '../../component/avatar-selector/avatar-selector';
import {updata} from '../../redux/user.redux';


@connect(
    state=>state.user,
    {updata}
)
class BossInfo extends React.Component{
    constructor(props){
        super(props)
        this.state={
            title:'',
            company:'',
            money:'',
            desc:'',
        }
    }
    onChange(key,v){
        this.setState({
            [key]:v
        })
    }
    render(){
        return (
            <div>
                {this.props.redirectTo?<Redirect to={this.props.redirectTo}></Redirect>:null}
                <NavBar mode="dark">Boss完善信息页面</NavBar>
                <AvatarSelector selectAvatar={(imagename)=>{
                    this.setState({
                        avatar:imagename
                    })
                }}></AvatarSelector>
                <InputItem onChange={(v)=>{this.onChange('title',v)}}>
                    招聘职位
                </InputItem>
                <InputItem onChange={(v)=>{this.onChange('company',v)}}>
                    公司名称
                </InputItem>
                <InputItem onChange={(v)=>{this.onChange('money',v)}}>
                    职位薪资
                </InputItem>
                <TextareaItem
                 title='职位要求'
                 rows={3}
                 autoHeight
                 onChange={(v)=>{this.onChange('desc',v)}}
                >
                </TextareaItem>
                <Button onClick={()=>this.props.updata(this.state)} type='primary'>保存</Button>
            </div>
        )
    }
}

export default BossInfo;

这是user.redux.js

import axios from "axios";
import { getRedirectPath } from '../util' ;

const AUTH_SUCCESS  = 'AUTH_SUCCESS';
const ERROR_MSG  = 'ERROR_MSG';
const LOAD_DATA  = 'LOAD_DATA';

const initStatus={
    redirectTo:'',
    msg:'',
    user:'',
    type:'',
}
//reducer
export function user(state=initStatus,action){
    switch(action.type){
        case AUTH_SUCCESS:
            return {...state,msg:'',redirectTo:getRedirectPath(action.data),...action.data}
        case LOAD_DATA:
            return {...state,...action.data}
        case ERROR_MSG:
            return {...state,isAuth:false,msg:action.msg}
        default:
            return state;
    }
}

//action
function authSuccess(data){
    return { type:AUTH_SUCCESS, data:data }
}
function errorMsg(msg){
    return { type:ERROR_MSG, msg:msg }
}
export function register({user,pwd,repeatpwd,type}){
    if(!user || !pwd){
        return errorMsg('用户名密码必须输入!')
    }
    if(pwd!=repeatpwd){
        return errorMsg('两次密码输入不一致!')
    }
    //redux-thunk支持返回函数的写法(这边是异步)
    return dispatch =>{
        axios.post('/user/register',{user,pwd,type}).then(res=>{
            if(res.status==200&&res.data.code==0){
                dispatch(authSuccess({user,pwd,type,_id:res.data.data._id}))
            }else{
                dispatch(errorMsg(res.data.msg))
            }
        })
    }
}

export function login({user,pwd}){
    if(!user || !pwd){
        return errorMsg('用户名和密码不能为空!')
    }
    return dispatch =>{
        axios.post('/user/login',{user,pwd}).then(res=>{
            if(res.status==200 && res.data.code==0){
                dispatch(authSuccess(res.data.data))
            }else{
                dispatch(errorMsg(res.data.msg))
            }
        })
    }
}

export function loadData(userinfo){
    return {type:LOAD_DATA,data:userinfo}
}

export function updata(data){
    return dispatch=>{
        axios.post('/user/updata',data)
            .then(res=>{
                if(res.status==200 && res.data.code==0){
                    dispatch(authSuccess(res.data.data))
                }else{
                    dispatch(errorMsg(res.data.msg))
                }
            })
    }
}

你为什么一直报告这个问题?这是指向错误的方向吗?寻求帮助

共有1个答案

慕永年
2023-03-14

onChange 函数在每次渲染时执行,将函数更改为箭头函数,如

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

  • 当我运行我的代码时,我收到了这个错误。 超过了最大更新深度。当组件重复调用组件WillUpdate或组件DidUpdate中的setState时,可能会发生这种情况。React限制嵌套更新的数量以防止无限循环。 这是代码。它在引用。 我按照React网站上的文章所说的方式设置了我的东西,它“来了”于这个简洁的控制台类型,这就是我产生上述代码的地方。我对React、JSX和Javascript(以及

  • 当我试图设置表单错误对象时,我遇到了这个问题。基本上,我想在每个输入字段下方显示错误。作为回应,我得到了一个对象数组,我如何设置我的错误对象? 错误-超过了最大更新深度。当组件在useEffect内部调用setState,但useEffect没有依赖关系数组,或者每次呈现时依赖关系之一发生变化时,就会发生这种情况。

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

  • 我正在使用FullCalendar进行反应,我正在与状态作斗争……它返回以下消息: 错误:超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate内重复调用setState时,可能会发生这种情况。React限制嵌套更新的数量,以防止无限循环。 我删除了代码中所有不必要的部分。 如果您想让我提供更多信息,请告诉我。欢迎任何反馈/想法!谢谢

  • 这是我的一段代码: 但这给了我错误,说超过了最大更新深度。当组件重复调用组件内部的 setState 时,可能会发生这种情况“组件将更新”或“组件更新”。React 限制嵌套更新的数量,以防止无限循环。 这是一个快照: 我该如何解决这个问题?