这是我在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,要么使用我拥有的箭头函数,所以我不明白是什么导致了这个问题.

UPDATE 1

我能够在函数开始时为console.log(this.state.sets);,所以我唯一的假设是它没有在中定义.然后出于某种原因发挥作用.有办法吗?

推荐答案

问题是您使用的是function(){}而不是箭头函数(() => {}).

这样函数就不会从类组件继承this,因此thisundefined.

您可以阅读有关箭头函数和this here on MDN的更多信息.


Convert your function(){} into an arrow function () => {}
or
.bind() your function using this as param (like function(){}.bind(this))
in order to solve the problem.

Javascript相关问答推荐

为什么我达到了时间限制!?LeetCode链接列表循环(已解决,但需要解释!)

ReactJS中的material UI自动完成类别

如何将连续的十六进制字符串拆分为以空间分隔的十六进制块,每个十六进制块包含32个二元组?

阿波罗返回的数据错误,但在网络判断器中是正确的

使用LocaleCompare()进行排序时,首先使用大写字母

我正在建立一个基于文本的游戏在react ,我是从JS转换.我怎样才能使变量变呢?

从包含数百行的表中获取更改后的值(以表单形式发送到后端)的正确方法是什么?

JS:XML insertBefore插入元素

如何将zoom 变换应用到我的d3力有向图?

OpenAI转录API错误请求

在不删除代码的情况下禁用Java弹出功能WordPress

expo 联系人:如果联系人的状态被拒绝,则请求访问联系人的权限

AddEventListner,按键事件不工作

是否可以将异步调用与useState(UnctionName)一起使用

判断函数参数的类型

用于测试其方法和构造函数的导出/导入类

有没有办法通过使用不同数组中的值进行排序

AstroJS混合模式服务器终结点返回404

找不到处于状态的联系人

在JS/TS中构造RSA公钥