开发者问题收集

未捕获(在承诺中)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 ,因此 thisundefined

You can read more about arrow function and this here on MDN .


将您的 function(){ 转换为箭头函数 () => {

.bind() 您的函数使用 this 作为参数(如 function(){}.bind(this)
以解决问题。

Doc
2022-07-21