我需要放一张照片,然后将其上传到服务器并更新界面。我有一个问题,在我指示将this.state与prevState进行比较的条件下,生命周期方法componentDidUpdate开始无限更新。 (PrevState是未定义的,我不明白为什么。)
我将代码放在沙箱中,希望它会清楚。 https://codesandbox.io/s/headless-smoke-4xxi2
答案 0 :(得分:2)
原因::这似乎是参考/可变内存地址问题。
当存储到itemsList
时,您正在创建一个新引用,因为您从api接收到非原始值。涉及非原始值时,JS始终使用引用进行操作。因此,您的if (this.state.itemsList !== prevState.itemsList)
将始终返回true
,因为itemsList
是一个非原始数据集的数组,这意味着JS不会检查其值,而只会检查引用。
在这种情况下,我看到两个解决方案atm:
OR
if (this.state.itemsList !== prevState.itemsList)
中的具有适当检查器功能的值进行检查希望我能解释。干杯!
答案 1 :(得分:0)
您没有使用正确的参数。请参阅componentDidUpdate将prevProps
作为第一个参数,将prevState
作为第二个参数。
尝试一下
componentDidUpdate(prevProps, prevState)
答案 2 :(得分:0)
prevState是componentDidUpdate的第二个参数。试试-
componentDidUpdate(prevProp, prevState) {
console.log(this.state.itemsList, prevState.itemsList);
if (this.state.itemsList !== prevState.itemsList) {
// if you remove the comment from this method, then an infinite update will begin
//
this.updateItemList();
}
}