You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中v-for无法加载users数组,求正确实现方案

解决Vue中v-for无法渲染API获取数据的问题

嘿,我瞅了下你的代码,问题出在**this的指向**上!在axios的.then()回调里用普通函数的话,这个函数里的this并不是指向Vue实例——你以为是给组件data里的users数组赋值,实际上是给回调函数自己的this加了个属性,根本没更新到Vue的响应式数据里,所以v-for自然没东西可渲染啦。

给你三种可行的解决办法,选一种用就行:

方法1:使用箭头函数(最推荐)

箭头函数不会绑定自己的this,会直接继承外层作用域的this(也就是Vue实例)。修改你的beforeMount钩子代码:

new Vue({
  el: "#vue-app",
  data: {
    name: "dani",
    thumbnail: '',
    users: []
  },
  beforeMount() {
    axios.get('https://jsonplaceholder.typicode.com/users')
      // 把普通函数改成箭头函数
      .then((response) => {
        this.users = response.data
        console.log("users: ", this.users[0])
      })
      .catch(function (error) {
        console.log(error)
      })
  }
})

方法2:提前保存Vue实例的引用

在beforeMount里先把Vue实例的this存成一个变量,之后在回调里用这个变量操作数据:

new Vue({
  el: "#vue-app",
  data: {
    name: "dani",
    thumbnail: '',
    users: []
  },
  beforeMount() {
    // 先把Vue实例的this存起来
    const vm = this
    axios.get('https://jsonplaceholder.typicode.com/users')
      .then(function (response) {
        vm.users = response.data
        console.log("users: ", vm.users[0])
      })
      .catch(function (error) {
        console.log(error)
      })
  }
})

方法3:用bind()绑定this

给回调函数手动绑定Vue实例的this,确保回调里的this指向正确:

new Vue({
  el: "#vue-app",
  data: {
    name: "dani",
    thumbnail: '',
    users: []
  },
  beforeMount() {
    axios.get('https://jsonplaceholder.typicode.com/users')
      .then(function (response) {
        this.users = response.data
        console.log("users: ", this.users[0])
      }.bind(this)) // 这里绑定Vue实例的this
      .catch(function (error) {
        console.log(error)
      })
  }
})

你的HTML部分代码完全没问题,只要JS里正确更新了users数组,v-for就能正常渲染出用户卡片啦。

内容的提问来源于stack exchange,提问作者Dani Vijay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:58:32