vue报错cannot read property_vue3 ref 数组

vue报错cannot read property_vue3 ref 数组当函数执行到this.agents.splice()时,我设置了断点。发现传参index是0,但是页面上的列表项对应的第一行数据没有被删除,WTF!!!这是什么鬼!然后我打开VueDevtools,然后刷新了一下,发现那个数组的第一项还是存在的removeOneAgentByIndex:function(index){this.agents.splice(index,1)…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

当函数执行到this.agents.splice()时,我设置了断点。发现传参index是0,但是页面上的列表项对应的第一行数据没有被删除,

WTF!!! 这是什么鬼!然后我打开Vue Devtools, 然后刷新了一下,发现那个数组的第一项还是存在的


removeOneAgentByIndex: function (index) {
  this.agents.splice(index, 1)
}

然后我就谷歌了一下,发现这个splice not working properly my object list VueJs, 大概意思是v-for的时候最好给列表项绑定:key=。然后我是试了这个方法,发现没啥作用。

最终我决定,单步调试,如果我发现该问题出在Vue自身,那我就该抛弃Vue, 学习React了

单步调试中出现一个异常的情况,removeOneAgentByIndex是被A函数调用的,A函数由websocket事件驱动。正常情况下应该触发一次的事件,服务端却发送了两次到客户端。由于事件重复,第一次执行A删除时,实际上removeOneAgentByIndex是执行成功了,但是重复的第二个事件到来时,A函数又往agents数组中添加了一项。导致看起来,removeOneAgentByIndex函数执行起来似乎没有设么作用。而且这两个重复的事件是在几乎是在同一时间发送到客户端,所以我几乎花了将近一个小时去解决这个bug。引起这个bug的原因是事件重复,所以我在前端代码中加入事件去重功能,最终解决这个问题。

我记得之前看过一篇文章,一个开发者调通过回调函数计费,回调函数是由事件触发,但是没想到有时候事件会重发,导致重复计费。后来这名开发者在自己的代码中加入事件去重的功能,最终解决了这个问题。

事后总结:我觉得我不该怀疑Vue这种库出现了问题,但是我又不禁去怀疑。

通过这个bug, 我也学到了第二方法,可以删除Vue数组中的某一项,参考下面代码。


// Only in 2.2.0+: Also works with Array + index.
removeOneAgentByIndex: function (index) {
  this.$delete(this.agents, index)
}

另外Vue devtools有时候并不会实时的观测到组件属性的变化,即使点了Refresh按钮。如果点了Refresh按钮还不行,那建议你重新打开谷歌浏览器的devtools面板。

最后for循环是非常建议对列表项绑定:key, 这个key应当是固定且唯一的,可以是uuid,或者id。但是千万不要绑定数组的index, 否则就会出现Vue项目中v-for数组删除第n项元素产生渲染错误


// very bad
<li v-for="(item,index) in list" :key="index"></li>


// very good
<li v-for="(item,index) in list" :key="item.id"></li>

原文地址:https://segmentfault.com/a/1190000017356114

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

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

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


相关推荐

  • HTML与XML的区别(转)

    什么是HTML  HTML的全拼是Hypertext Markup Language, 中文也就是超文本链接标示语言。HTML(HyperTextMark-upLanguage)即超文本标记语言,是WWW的描述语言。设计HTML语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起,形成有机的整体,人们不用考虑具体信息是在当前电脑上还是在网络的其它电脑上。我们只需

    2022年2月25日
    53
  • Java是什么意思-给想要了解Java的朋友介绍Java

    Java是什么意思-给想要了解Java的朋友介绍Java许多人会比较好奇,Java是什么意思?或许听说过Java是一种编程语言,但也会不禁思考Java是干什么用的?今天我来给没有接触过计算机行业的同学们简单介绍一下Java。

    2022年7月7日
    27
  • 用计算机制作flash动画教案,Flash动画制作教案

    用计算机制作flash动画教案,Flash动画制作教案以下是出国留学网小编整理的高中信息技术《Flash动画制作》教案,供大家浏览参考。更多相关内容请关注出国留学网教案栏目。高中信息技术《Flash动画制作》教案一:课题:Flash动画制作——绘制七巧板教学目标:熟悉Flash软件的操作界面运用Flash软件绘制七巧板教学重点:绘制七巧板教学难点:如何选用合适的工具正确绘制七巧板教学方法:讲授法,演示法教学过程:一:打开Flash软件“开始”菜单―…

    2022年4月29日
    47
  • 验证码图片

    验证码图片

    2021年9月5日
    60
  • acwing-1172. 祖孙询问(最近公共祖先)「建议收藏」

    acwing-1172. 祖孙询问(最近公共祖先)「建议收藏」原题链接给定一棵包含 n 个节点的有根无向树,节点编号互不相同,但不一定是 1∼n。有 m 个询问,每个询问给出了一对节点的编号 x 和 y,询问 x 与 y 的祖孙关系。输入格式输入第一行包括一个整数 表示节点个数;接下来 n 行每行一对整数 a 和 b,表示 a 和 b 之间有一条无向边。如果 b 是 −1,那么 a 就是树的根;第 n+2 行是一个整数 m 表示询问个数;接下来 m 行,每行两个不同的正整数 x 和 y,表示一个询问。输出格式对于每一个询问,若 x 是 y 的祖先则输

    2022年8月9日
    7
  • linux .deb 安装_快速提示:如何在Linux中安装.deb和.tar文件

    linux .deb 安装_快速提示:如何在Linux中安装.deb和.tar文件linux.deb安装Inthisquicktutorial,IexplainhowtoinstallprogramsinLinuxusingterminalcommands.ThisparticulartutorialusesLinuxMint18(Cinnamon64-bit),butthecommandsprovidedbelow…

    2022年5月15日
    53

发表回复

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

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