vue常见错误:Invalid prop: type check failed for prop “data“. Expected Array, got Object

vue常见错误:Invalid prop: type check failed for prop “data“. Expected Array, got Object错误截图错误分析这个错误的意思是说:无效的命名数据:“数据”类型检查失败。期望数组,得到对象,那么我们这个时候很明白了,是类型不对,但是是哪一行的呢?打开错误信息下面的详情,这个时候找到后缀是自己页面的.vue文件,看看是哪一行,就知道问题在哪了!下面的是我的:warn @ vue.esm.js?efeb:610assertProp @ vue.esm.js?efeb:1691vali…

大家好,又见面了,我是你们的朋友全栈君。

错误截图

desc-cn

错误分析

这个错误的意思是说:无效的命名数据:“数据”类型检查失败。期望数组,得到对象,那么我们这个时候很明白了,是类型不对,但是是哪一行的呢?打开错误信息下面的详情,这个时候找到后缀是自己页面的.vue文件,看看是哪一行,就知道问题在哪了!下面的是我的:

warn	@	vue.esm.js?efeb:610
assertProp	@	vue.esm.js?efeb:1691
validateProp	@	vue.esm.js?efeb:1618
updateChildComponent	@	vue.esm.js?efeb:2975
prepatch	@	vue.esm.js?efeb:4255
patchVnode	@	vue.esm.js?efeb:6029
updateChildren	@	vue.esm.js?efeb:5914
patchVnode	@	vue.esm.js?efeb:6040
updateChildren	@	vue.esm.js?efeb:5914
patchVnode	@	vue.esm.js?efeb:6040
updateChildren	@	vue.esm.js?efeb:5914
patchVnode	@	vue.esm.js?efeb:6040
updateChildren	@	vue.esm.js?efeb:5914
patchVnode	@	vue.esm.js?efeb:6040
patch	@	vue.esm.js?efeb:6203
Vue._update	@	vue.esm.js?efeb:2790
updateComponent	@	vue.esm.js?efeb:2908
get	@	vue.esm.js?efeb:3278
run	@	vue.esm.js?efeb:3353
flushSchedulerQueue	@	vue.esm.js?efeb:3109
(anonymous)	@	vue.esm.js?efeb:1938
flushCallbacks	@	vue.esm.js?efeb:1857
Promise.then (async)		
microTimerFunc	@	vue.esm.js?efeb:1905
nextTick	@	vue.esm.js?efeb:1951
queueWatcher	@	vue.esm.js?efeb:3201
update	@	vue.esm.js?efeb:3343
notify	@	vue.esm.js?efeb:721
reactiveSetter	@	vue.esm.js?efeb:1046
proxySetter	@	vue.esm.js?efeb:3430
(anonymous)	@	main.vue?512e:426
Promise.then (async)		
(anonymous)	@	main.vue?512e:408

看倒数第三行,是我的文件,那么我的错误是在426行,看一下我的426行代码是什么:

that.common_table_info = res.data.data.room_type_price;

这是我的426行代码,那么其实这个时候问题就很明显了,说明我前面的是一个数组,后面的是一个对象,那么common_table_info是我绑定的一个表格的数据,element:data=‘common_table_info’,他希望拿到的是一个数组,但是我给了他一个对象,数据是渲染上去了,但是其实是报错的。下面的是res.data.data.room_type_price返回的结果,很明显是一个对象。

{ 
   
    "message": "success",
    "data": { 
   
        "room_type_price": { 
   
            "FYDCF": { 
   
                "room_type": "风雅大床房",
                "2019-05-16": "35/221",
                "2019-05-17": "39/221",
                "2019-05-18": "39/221",
                "2019-05-19": "39/221",
                "2019-05-20": "39/221",
                "2019-05-21": "39/221",
                "2019-05-22": "39/221"
            },
            "FYSCF": { 
   
                "room_type": "风雅双床房",
                "2019-05-16": "36/239",
                "2019-05-17": "39/239",
                "2019-05-18": "39/239",
                "2019-05-19": "39/239",
                "2019-05-20": "39/239",
                "2019-05-21": "39/239",
                "2019-05-22": "39/239"
            },
            "FYTF": { 
   
                "room_type": "家庭套房",
                "2019-05-16": "0/359",
                "2019-05-17": "0/359",
                "2019-05-18": "0/359",
                "2019-05-19": "0/359",
                "2019-05-20": "0/359",
                "2019-05-21": "0/359",
                "2019-05-22": "0/359"
            }
        }
    },
    "new_authorization": "af3e405073cb44baaf6e5508019c9a3b"
}
问题解决

既然找到了原因,解决就很简单了,直接将对象转为数组就好了!

let common_table_info = [];
              /** * 这里需要将拿到的对象转为数组,进行赋值,这样才不会宝类型错误 */
              for(let i in res.data.data.room_type_price){ 
   
                common_table_info.push(res.data.data.room_type_price[i]);
              }
              that.common_table_info = common_table_info;

到这里就解决了,很多的问题都是我们的大意造成的,其实只要写代码认真一些,这些问题应该都不会出现。

喜欢的可以关注,一起学习!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131701.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 线程的IsBackground属性「建议收藏」

    线程的IsBackground属性「建议收藏」.Net的公用语言运行时(CommonLanguageRuntime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。.net环境使用Thread建立的线程默认情况下是前台线程,即线程属性IsBackground=

    2022年10月17日
  • Keil5新建STM32工程(详细图解)[通俗易懂]

    Keil5新建STM32工程(详细图解)[通俗易懂]一、下载ST官方库    首先注册账号登录,然后点击产品、微控制器;如图       接着右侧的工具与软件;嵌入式软件,并选择STM32,如图。 我的是STM32F1系列,选择如图这个   获取软件   然后下载即可。 二、安装keil   不介绍。相信都安装好了。三、准备工作       新建project文件夹,并在里面新建三个文件夹,CMSIS(存放内核函数及启动引导文件)…

    2022年5月23日
  • AD域安装

    AD域安装https://www.cnblogs.com/BugBrother/p/6760504.html

    2022年5月13日
  • Zabbix 监控 java 应用

    Zabbix 监控 java 应用监控tomcat主机的可用性有这些,zbx代表zabbix,snmp多用于监控windows的东西,jmx通常用于监控java的应用,比如tomcat。我们在server2上配置tomcat。rpm-ivhjdk-8u121-linux-x64.rpmtarzxfapache-tomcat-8.5.24.tar.gz-C/usr/local/ln-sapache-tomcat-8.5.24tomcat方便使用更改配置文件:vim/usr/local/to

    2022年5月13日
  • python进阶(15)多线程与多进程效率测试[通俗易懂]

    python进阶(15)多线程与多进程效率测试[通俗易懂]前言在Python中,计算密集型任务适用于多进程,IO密集型任务适用于多线程正常来讲,多线程要比多进程效率更高,因为进程间的切换需要的资源和开销更大,而线程相对更小,但是我们使用的Python大多

    2022年7月28日
  • 十二大相似图片搜索网站(以图搜图)

    十二大相似图片搜索网站(以图搜图)十二大相似图片搜索网站(以图搜图)如何凭着一张现有图片找出它的原始图片,或者是凭着一张小的缩略图找出原始大图?下面的搜索引擎可以帮你实现、以图找图、以图搜图。以图搜图是颠覆性的搜索方式,基于图片的搜索模式自09年以来在全球各大权威评选中,都被公认为未来几年互联网最有前途的创新应用。随着…

    2022年7月17日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号