我收到错误超过最大更新深度。当组件重复调用componentWillUpdate或componentDidUpdate内部的setState时,可能会发生这种情况

时间:2019-11-09 12:19:41

标签: reactjs

有很多类似的问题,尽管我在这里发布了。

我遇到以下错误:

  

未捕获的恒定违反:超出最大更新深度。当组件重复调用componentWillUpdate或componentDidUpdate内部的setState时,可能会发生这种情况。 React限制了嵌套更新的数量,以防止无限循环。

请注意,我没有在页面中使用过此类功能。

选择Datepicker时发生错误:

constructor(props){
super(props);
this.state={
fields: {},
errors: {}
}
}
handleIssueDate(date){
       // this.state.IssueDate = moment(date).format("YYYY-MM-DD")
       debugger;
           let fields = this.state.fields;
           fields["IssueDate"] = moment(date).format("YYYY-MM-DD")
           this.setState({
               fields
           });
           let errors = this.state.errors;
           if (errors[date] != "" || errors[date] != null) {
               errors["IssueDate"] = "";
           }

      }
render(){
return (
<DatePicker name="IssueDate" onChange={this.handleIssueDate} selected={this.state.fields.IssueDate} value={this.state.fields.IssueDate}  placeholderText={"YYYY-MM-DD"}  />)
}

编辑: 我刚刚从setState中删除了矩函数。现在工作正常。请任何人解释这个奇怪的错误/行为。

2 个答案:

答案 0 :(得分:1)

显然您是在改变状态。

let fields = this.state.fields; // fields still holds the reference to the state

fields["IssueDate"] = moment(date).format("YYYY-MM-DD") // here happens the mutation

this.setState({ // state is changed again
    fields,
});

errors["IssueDate"] = ""; // state mutation once again

建议的方法:

在状态内定义“ IssueDate”字段:

state = {
   fields: {
      IssueDate: null,
   },
   error: {
      IssueDate: null,
   },
}

,然后在您的onChange函数中:

this.setState(({ fields }) => ({
   fields: {
      ...fields,
      IssueDate: moment(date).format("YYYY-MM-DD"),
   },
});

同样执行错误操作

答案 1 :(得分:0)

https://github.com/Hacker0x01/react-datepicker/blob/master/docs/datepicker.md

已选择类型是 instanceOf(Date)不是字符串