未捕获(在承诺中)TypeError:无法读取未定义的属性(读取“状态”)
2022-07-21
13066
这是我在 React 中的第一个项目。我有此元素
<DragDropContext onDragEnd={(result) => this.HandleOnDragEnd(result)}>
,完成拖动后,它会调用以下函数,我在此函数中收到错误:
HandleOnDragEnd = (result) =>
{
const requestOptions = {
method: 'POST',
headers: { "Content-type":"application/json",
"Accept":"application/json",
"Accept-Encoding":"gzip, deflate, br" }
};
fetch(url, requestOptions)
.then(function(response){
if(!response.ok)
{
return response.statusText;
}
else{
const items = [...this.state.sets];
const itemReordered = items.splice(result.source.index, 1);
items.splice(result.destination.index, 0, itemReordered);
this.setState({sets: items});
}
})
}
问题发生在 else 语句中。由于某种原因,它认为 this.state 未定义。到目前为止,我检查过的所有地方都只是说要么将
this
与构造函数中的函数绑定,要么使用我拥有的箭头函数,所以我不明白是什么导致了这个问题。
更新 1
我能够在函数开始时
console.log(this.state.sets);
,所以我唯一的假设是由于某种原因它未在 .then 函数中定义。有沒有方法可以解决这个问题?
1个回答
问题在于您使用的是
function(){
而不是箭头函数 (
() => {
)。
这样,函数就不会从类组件继承
this
,因此
this
是
undefined
。
You can read more about arrow function and
this
here on MDN .
将您的
function(){
转换为箭头函数
() => {
或
.bind()
您的函数使用
this
作为参数(如
function(){}.bind(this)
)
以解决问题。
Doc
2022-07-21