Vue中关于axios请求的数据通过‘.then’转存报错问题

文章讲述了在Vue组件中使用async/await和axios时遇到的‘Cannotsetpropertiesofundefined’错误,原因在于箭头函数中的this指向window而非组件实例。解决方法是将`then`里的函数改为箭头函数,确保this指向组件实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决方案

async test() {
      await this.$axios({
        method: "post",
        url: '/home',
      }).then((value)=>{//将回调函数改用箭头函数处理
        console.log(value.data);
        this.list = value.data.data
      });
    },

问题解析

报错内容

uncaught (in promise) TypeError: Cannot set properties of undefined (setting 'concat_list')

问题源码

async test() {
      await this.$axios({
        method: "post",
        url: '/home',
      }).then(function(value){
        console.log(value.data);
        this.list = value.data.data
      });
    },

即服务器返回的数据无法通过this指向进行转存至data中,此处this所指向的位置不存在相关内容,也就是说此处的this并不是我们以为的当前组件中的this,因此我们打印此处的this ==>

可以看到这里的this为空即此处的this指向时有问题的

问题起因

经过查询后发现:function函数中的this指向页面的window对象而不是指向该vue组件实例,因此我们需要做的便是使问题代码中的this指向变为vue实例本身。

而选择箭头函数的原因在于箭头函数没有自己的this, 它的this是继承而来; 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象。

引用/参考文章内容

vue 箭头函数与function函数的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值