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

Vue项目中使用Vuex+GraphQL时,V-for循环无法渲染数据(控制台可见数据)的问题求助

问题排查:V-for无法渲染数据导致元素消失

核心问题出在你的Vuex Action中对数据的处理上——你把获取到的数组转换成了JSON字符串,而v-for需要遍历数组类型的数据,字符串无法被正确遍历,最终导致渲染的元素消失。

具体分析

看你portfolioList Action里的这段代码:

const portfolios = JSON.stringify(response.data.portfolios)
commit('SET_PORTFOLIOS', portfolios)

response.data.portfolios本身就是后端返回的数组数据,你却用JSON.stringify()把它转成了字符串类型。当这个字符串被存入Vuex State后,组件里的v-for="portfolio in portfolios"实际上是在遍历字符串的每个字符,而每个字符并没有id、about这些属性,所以渲染时不仅无法显示内容,还可能因为key绑定无效(portfolio.id不存在)导致整个<section>元素被Vue判定为无效而移除。

修复方案

直接移除JSON.stringify(),把原始数组提交给mutation即可:

修改Vuex Action中的代码:

async portfolioList({commit}){
  try{
    const response = await apolloClient.query({query: PORTFOLIO_LIST})
    // 去掉JSON.stringify,直接使用原始数组
    const portfolios = response.data.portfolios
    commit('SET_PORTFOLIOS', portfolios)
    console.log(portfolios)
  } catch(e){
    console.log(e)
  }
},

同时,建议你检查portfolioDetail Action里的代码,同样存在JSON.stringify(response.data)的问题,后续如果要使用这个数据,也需要移除这个转换。

额外验证

修复后,你可以在组件的computed属性里打印portfolios的类型,确认它是数组:

computed:{
  ...mapState(['portfolios']),
  // 新增一个计算属性验证类型
  portfolioType(){
    console.log(typeof this.portfolios, Array.isArray(this.portfolios))
    return Array.isArray(this.portfolios)
  }
},

如果控制台输出true,说明数据类型正确,v-for就能正常遍历渲染了。

内容的提问来源于stack exchange,提问作者Udemezue John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:37:30