[英]repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops
componentDidUpdate(prevProps, prevState) {
const { data } = this.state;
if (prevState.data.date !== data.date) {
const startDate = new Date(data.date.startDate);
const endDate = new Date(data.date.endDate);
const countDuration = new Date(endDate - startDate).getDate();
this.setState({
data: {
...this.state.data,
duration: countDuration,
},
});
}
if (prevState.data.duration !== data.duration) {
const startDate = new Date(data.date.startDate);
const endDate = new Date(
startDate.setDate(startDate.getDate() + +data.duration - 1)
);
this.setState({
...this.state,
data: {
...this.state.data,
date: {
...this.state.data.date,
endDate: endDate,
},
},
});
}
} }
But this gives me error, saying Maximum update depth exceeded.但这给了我错误,说超出了最大更新深度。 This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate.
当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况。 React limits the number of nested updates to prevent infinite loops.
React 限制了嵌套更新的数量以防止无限循环。
It looks like you're changing the data.date and data.duration properties in the wrong place.看起来您在错误的位置更改了 data.date 和 data.duration 属性。 As a result, the conditions
prevState.data.date.== data.date
and prevState.data.duration.== data.duration
are never evaluating to true
and thus the setState
calls happen each time, causing an infinite loop结果,条件
prevState.data.date.== data.date
和prevState.data.duration.== data.duration
永远不会评估为true
,因此每次都会发生setState
调用,从而导致无限循环
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.