开发者问题收集

React 应用程序抛出错误无法读取嵌套承诺中未定义的属性“setState”

2019-11-13
77

在我的 React 应用程序中,嵌套的 promise 调用中出现此错误

Cannot read property 'setState' of undefined

奇怪的是,在 promise 之外,将值设置为 true 和 false 都没有问题。

console.log('about to set false')
this.setState({
    loadingMedications: false                    
}); 
console.log('about to set true')
this.setState({
    loadingMedications: true                    
}); 


SAIIndexedDB(response.data).then(function(result){
    this.setState({
         loadingMedications: false                    
    });  
})
.catch(function(error){
    console.log('error', error);
});

因此,上面的控制台输出正常且没有错误 但是在 promise 中,catch 抛出了错误 - 这个 promise 需要大约一分钟才能返回,因为它正在将 170k 条记录加载到离线 indexeddb 数据库中,然后返回,因此 loadingMedications 是一个加载微调器,需要将其设置为 false 才能隐藏它。

想知道为什么吗?

2个回答

问题出在 this

除了 this,

SAIIndexedDB(response.data).then(function(result){
    this.setState({
         loadingMedications: false                    
    });  
})

你需要使用自动绑定 this 的箭头函数,

SAIIndexedDB(response.data).then((result) => {
    this.setState({
         loadingMedications: false                    
    });  
})
ravibagul91
2019-11-13

另一个解决方案是将 this 分配给一个变量并在回调中使用该变量

const self = this;
SAIIndexedDB(response.data).then(function(result){
    // replace $this with $self
    self.setState({
         loadingMedications: false                    
    });  
})
.catch(function(error){
    console.log('error', error);
});
Long Tran thanh
2019-11-13