uni-app TypeError: Cannot read property 'remove' of undefined at uni-app-view.umd.js:1

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app TypeError: Cannot read property ‘remove’ of undefined at uni-app-view.umd.js:1

产品分类

uniapp/App

开发环境信息

项目 信息
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 mac mojave
HBuilderX类型 Alpha
HBuilderX版本号 3.7.13
手机系统 Android
手机系统版本号 Android 11
手机厂商 华为
手机机型 P20
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

示例代码

<uni-section title="通讯录" type="line" title-font-size="32rpx">  
    <view v-if="contactList.length > 0 && showId">  
        <uni-list :border="true" v-for="(item, index) in contactList" :key="index">  
            <uni-list-item :avatar-circle="true" :title="item.nickname" :note="item.intro"  
                :thumb="item.avatar_file.url + item.avatar_file.extname" thumb-size="lg" clickable  
                @click="toInfo(item._id)"></uni-list-item>  
        </uni-list>  
    </view>  

    <view v-if="contactList.length == 0 && showId">  
        <uni-list>  
            <uni-list-item :disabled="true" title="暂无用户"></uni-list-item>  
        </uni-list>  
    </view>  
</uni-section>

操作步骤

页面 Onshow时,给 contactList 一个数据进行渲染。

预期结果

渲染出列表。

实际结果

报错。

bug描述

该代码在小程序的运行上没有问题,但是在运行到 Android APP基座上就报错了。

图片


2 回复

在处理 uni-app 中的 TypeError: Cannot read property 'remove' of undefined 错误时,通常意味着你尝试在一个未定义的对象上调用 remove 方法。这种错误经常发生在操作 DOM 或处理数据集合时,尤其是当期望的对象或元素未正确初始化或已经被销毁。

为了更具体地解决这个问题,我们需要确保在调用 remove 方法之前,相关对象或元素是已定义且有效的。以下是一个基于 uni-app 的示例代码,展示如何安全地移除一个列表项,同时避免上述错误。

示例场景:从列表中移除一个项目

假设我们有一个商品列表,用户可以通过点击一个按钮来移除列表中的某个商品。

1. 数据绑定和模板

pages/index/index.vue 中:

<template>
  <view>
    <view v-for="(item, index) in items" :key="item.id">
      {{ item.name }}
      <button @click="removeItem(index)">移除</button>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: '商品A' },
        { id: 2, name: '商品B' },
        // 更多商品...
      ]
    };
  },
  methods: {
    removeItem(index) {
      if (this.items && this.items.length > index) {
        this.items.splice(index, 1); // 安全移除指定索引处的元素
      } else {
        console.error('尝试移除不存在的列表项');
      }
    }
  }
};
</script>

2. 错误避免策略

  • 检查存在性:在调用 splice 方法之前,通过 if 语句检查 this.items 是否存在以及索引是否有效。
  • 使用 Vue 的响应式方法splice 是 Vue 的响应式方法,可以直接修改数组并触发视图更新,无需手动操作 DOM。

3. 注意事项

  • 确保在组件的生命周期内,items 数组始终被正确管理,避免在组件销毁后尝试访问它。
  • 如果错误发生在框架内部(如 uni-app-view.umd.js),可能是因为框架的一个 bug 或者使用了不恰当的框架 API。此时,检查是否有最新的框架更新,或者查阅官方文档和社区以获取更多信息。

通过上述方式,可以有效避免因尝试在未定义对象上调用 remove 方法而导致的错误,同时保持代码的健壮性和可维护性。

回到顶部