【发布时间】:2019-09-10 15:28:35
【问题描述】:
我的纯组件中有这段代码:
componentDidUpdate(prevProps) {
const { scheduleSheet } = this.props;
const { scheduleSheet: prevScheduleSheet } = prevProps;
if (scheduleSheet !== prevScheduleSheet) {
this.setState({ board: scheduleSheet });
}
}
由于数组是 JS 中的对象,scheduleSheet !== prevScheduleSheet 总是会变成true。那么为什么组件不会陷入无限的更新循环呢?我的意思是,每次 'componentDidUpdate' 运行时,它会看到 prevProps 不等于新的,所以它会更新状态,这将运行 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 的样子吗?
-
@CodeManiac 添加。
this.props.scheduleSheet指父组件的state属性` -
向我们展示你是如何传递道具的,你为什么期望 diff 参考
-
@Skypho 这很奇怪,您在问题上发布的代码不应该发生这种情况,可能还有其他原因导致此问题,您可以发布一个 codepen 或创建一个最小可运行的 sn-p 到重现问题
-
您可以查看我在codesandbox中分享的示例,看看它是否回答了您的问题。
标签: javascript arrays reactjs lifecycle