有很多类似的问题,尽管我在这里发布了。
我遇到以下错误:
未捕获的恒定违反:超出最大更新深度。当组件重复调用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中删除了矩函数。现在工作正常。请任何人解释这个奇怪的错误/行为。
答案 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)不是字符串