我在纯组件中有以下代码:
componentDidUpdate(prevProps) {
const { scheduleSheet } = this.props;
const { scheduleSheet: prevScheduleSheet } = prevProps;
if (scheduleSheet !== prevScheduleSheet) {
this.setState({ board: scheduleSheet });
}
}
由于在JS中数组是对象,所以
scheduleSheet !== prevScheduleSheet
总是会被判定为true
。那么为什么组件不会陷入无限循环更新的情况呢?我的意思是,每次'componentDidUpdate'运行时,它都会发现prevProps与新的props不相等,因此会更新状态,这将导致componentDidUpdate
再次运行... 那为什么它不会发生呢?
这里有一个
this.props.scheduleSheet
的示例(它指向父组件的状态):[
null,
null,
[
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
true
],
[
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
true
],
[
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
true
],
[
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
true
]
]
this.props.scheduleSheet
指的是父组件的状态属性。 - user6898463