uniapp APP端运行报错 cid unmatched at view.umd.min.js:1

2024-01-03 07:32

本文主要是介绍uniapp APP端运行报错 cid unmatched at view.umd.min.js:1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近写的一个IM即时通讯系统差不多算是完善了,在h5端调试着一般都没有什么很难搞的bug。然而就在昨天,将项目运行到模拟器时聊天界面获取历史记录消息并渲染在页面上时,却报了一堆很奇怪的错误

cid unmatched at view.umd.min.js:1
TypeError: Invalid attempt to destructure non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method. at view.umd.min.js:1

当你在APP端运行时,如果出现这种报错信息,而在h5端又是正常的,这说明你的代码在使用对象属性时用到了一些未定义的属性,或者是属性值为null的。

出现错误的代码是在一个v-for循环中使用了我自定义的一个消息组件,用于显示消息页面的消息框,其中组件向外暴露了一个type属性,type的类型是boolean,在组件中用v-if,v-else来控制消息框居左还是居右,具体组件代码如下:

<template>  <view>  <view v-if="type">  <view class="message message-right">  <view class="message-right-status">  <u-loading-icon v-if="status === 'sending'" size="16"></u-loading-icon>  <u-icon v-if="status === 'fail'" name="error-circle-fill" size="16" color="#fa3534"></u-icon>  </view>  <view class="content content-right">  {{content}}  </view>  <view style="height: 80rpx;padding-right: 16rpx;">  <u-avatar v-if="avatar" :src="avatar"></u-avatar>  <u-avatar v-else :text="nickname.charAt(0)" randomBgColor></u-avatar>  </view>  </view>  </view>  <view v-else>  <view class="message message-left">  <view style="height: 80rpx;padding-left: 16rpx;">  <u-avatar v-if="avatar" :src="avatar"></u-avatar>  <u-avatar v-else :text="nickname.charAt(0)" randomBgColor></u-avatar>  </view>  <view class="content content-left">  {{content}}  </view>  </view>  </view>  </view>  
</template>  <script>  export default {  data() {  return {  }  },  props:{  //true时消息在右侧,即发送的消息,false时消息在左侧,即接收的消息  type:{  type: [Boolean],  default: false  },  nickname:{  type: [String,Number],  default: '私聊者昵称'  },  avatar:{  type: [String],  default: "/static/common/logo.png"  },  content:{  type: [String],  default: "消息内容"  },  status:{  type: [String],  default: 'none'  }  },  methods: {  }  }  
</script>  <style>  .message-time{  text-align: center;  color: #959595;  font-size: 26rpx;  }  .message{  width: 100%;  display: flex;  }  .message-left{  justify-content: flex-start;  }  .message-right{  justify-content: flex-end;  }  .message-right-status{  display: flex;  align-items: flex-end;  padding-right: 16rpx;  }  .content{  max-width: 70%;  min-width: 7%;  margin-top: 40rpx;  word-wrap:break-word;  word-break:break-all;  padding: 14rpx 10rpx 14rpx 18rpx;  border-radius: 20rpx;  font-size: 32rpx;  min-height: 40rpx;  }  .content-left{  margin-left: 4rpx;  background-color: #FFFFFF;  color: #000000;  }  .content-right{  margin-right: 8rpx;  background-color: #3c9cff;  color: #FFFFFF;  }  
</style> 

在网上找的帖子都说这种报错是因为使用的对象属性不存在,或是给组件传值时传的值是null等等。

为此我将组件的属性的默认值都设置为有意义的字符串(除了type属性外,因为他的类型是boolean),一开始将组件的传值全部取掉,运行页面,获取历史记录,页面都是正常的,之后我就将要给组件传值的属性一一测试,最后发现其他属性都不会引起上述报错,唯独type属性,后来我把type属性的类型改成string,number等发现均会引起报错,最后不得已,将这个消息组件拆成了两个组件,一个居左,一个居右。

不给组件传type值用于区分左右消息框,而是直接将原始组件拆分成两个。

未拆分前组件传值是这样的:

<scroll-view :style="{height: height+'px'}" :scroll-into-view="scrollIndex" scroll-y><view class="message-time" style="padding-top: 20rpx;">{{allHistoryLoaded ? '没有更多的历史消息' : '下拉获取历史消息'}}</view><view v-for="(item,index) in messages" :key="index" style="padding-top: 20rpx;" :id="`msg-${index+1}`"></view><my-msg :type="item.senderMid == selfObj.memberId":avatar="item.senderMid == selfObj.memberId?selfObj.avatar:friendObj.avatar":nickname="item.senderMid == selfObj.memberId?selfObj.nickname:friendObj.nickname":content="item.content":status="item.status"></my-msg></view>
</scroll-view>

代码去除了一些无关紧要的事件绑定,这样直接传值type用于区分消息框的位置会导致报错,后改成两个组件后:

<scroll-view :style="{height: height+'px'}" :scroll-into-view="scrollIndex" scroll-y><view class="message-time" style="padding-top: 20rpx;">{{allHistoryLoaded ? '没有更多的历史消息' : '下拉获取历史消息'}}</view><view v-for="(item,index) in messages" :key="index" style="padding-top: 20rpx;" :id="`msg-${index+1}`"><view v-if="item.senderMid == selfObj.memberId"><my-msg-right :content="item.content" :status="item.status ? item.status: 'none'" :nickname="selfObj.nickname" :avatar="selfObj.avatar"></my-msg-right></view><view v-else><my-msg-left :content="item.content" :nickname="friendObj.nickname" :avatar="friendObj.avatar"></my-msg-left></view></view>
</scroll-view>

在需要传值的组件外部包一个view并且通过v-if来实现原来要的效果,这般操作下来,发现没有报错了,查看了uniapp官方对于v3编译器的支持发现,其对v-if,v-else是支持的,但是我遇到的情况却是不支持的,也不知道是为什么,也可能是我用的不规范,但好歹最后把问题解决了。

如果你也在uniapp的APP端测试遇到了cid unmatched at view.umd.min.js:1的报错,可以先检查使用的对象属性是否存在,再看看传过去的值是否会是null,如果是组件传值建议花点时间对每个属性一一测试。

这篇关于uniapp APP端运行报错 cid unmatched at view.umd.min.js:1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/564938

相关文章

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,