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

相关文章

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32