traceyW 2022-11-24 10:58 采纳率: 0%
浏览 98
已结题

v-for循环空数组时,id报错undefined(已解决)

问题:在轮播图子组件中v-for循环渲染图片,但是报错Error in render: "TypeError: Cannot read properties of undefined (reading 'id')"

html结构如下:
```html
 <div class="swiper" ref="swipernow">
        <div class="swiper-wrapper">
          <div class="swiper-slide" v-for="{item,index} in skuImageList" :key="item.id">
            <img :src="item.imgUrl" alt="" :class="{current:currentIndex===index}" @click=changeIndex(index) />
          </div>
        </div>

js代码如下:

 props: ['skuImageList'],
  computed: {
    // 保证至少skuImageList[0]是个空的对象
    ImageList() {
      return this.skuImageList[0] || {}
    }
  },

其中,props中skuImageList的值来自于父组件,代码如下

computed: {
    ...mapGetters(['getCategoryView', 'getSkuInfo', 'getSpuSaleAttrList']),
    skuImageList() {
      // 保证如果服务器太慢,传进来的至少是一个空数组
      return this.getSkuInfo.skuImageList || []
    }
  }

报错:

img


个人分析原因:可能是在父组件中规定了this.getSkuInfo.skuImageList || [],所以当skuImageList返回值是空数组时,子组件对skuImageList进行for循环遍历,skuImageList中的item依然是空,item.id就是undefined。
尝试过在for循环的父元素swiper-wrapper中加入判断条件v-if="skuImageList!=[]",想让它判断当传过来的skuImageList不等于空数组的时候再执行下面的循环渲染操作,但是仍旧报错,有没有人帮忙看看这个该怎么解决~感谢

解决:在for循环的父元素swiper-wrapper中加入判断条件v-if的思路正确,但是具体语句出了问题,应该写为v-if="skuImageList.length!=0“,后面没有再报错了。

  • 写回答

3条回答 默认 最新

  • 向上的时钟塔 2022-11-24 11:20
    关注
    
    <template v-for="{item,index} in skuImageList" >
                <div class="swiper-slide"  :key="item.id">
                </div>
     </template>
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月7日
  • 修改了问题 12月7日
  • 修改了问题 12月7日
  • 创建了问题 11月24日

悬赏问题

  • ¥60 用r语言进行数据分析
  • ¥20 关于游戏c++语言代码问题
  • ¥15 如何制作永久二维码,最好是微信也可以扫开的。(相关搜索:管理系统)
  • ¥15 delphi indy cookie 有效期
  • ¥15 labelme打不开怎么办
  • ¥35 按照图片上的两个任务要求,用keil5写出运行代码,并在proteus上仿真成功,🙏
  • ¥15 免费的电脑视频剪辑类软件如何盈利
  • ¥30 MPI读入tif文件并将文件路径分配给各进程时遇到问题
  • ¥15 pycharm中导入模块出错
  • ¥20 Ros2 moveit2 Windows环境配置,有偿,价格可商议。