101
coang 120 天前
vue 文档 对象 /数组变更 列明 concat 不能用 和直接赋值 vue 是无法监测的
|
![]() |
103
zazalu 120 天前
@crs0910 恩恩 我随便找了个低版本的,切换成 2.1.10,看到报错了
Error: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node. |
![]() |
106
leemove 120 天前
@zazalu 这个问题不是一个简单的问题,是因为第三方依赖带来的错误,这种问题的分析是很复杂的,没必要因为踩了一个坑就灰心丧气,至少你现在已经明白了许多关于 vue 的新知识,下次就不会采坑了.
|
107
mars0prince 120 天前
不明白你的例子是什么意思,最好有代码演示一下
你提供的在线演示 demo,是因为你把最后一个元素删掉了啊,vue 比较 children 时候需要添加 vnode,在最后一个元素前面 insert,你把它从 dom 上删了,还不改 vdom,肯定插不进去嘛,不信你把 p 标签用 div 包起来就没问题了 |
109
mars0prince 120 天前
不要去手动操作 dom,会导致 vdom 和 dom 不一致的情况,说了很多次了,这个不是 bug,是你瞎用
|
![]() |
110
zazalu 120 天前
@mars0prince 我的例子里是 iview 的 Drawer 组件使用的 transfer-dom.js 的第 27 行代码,使用 js 手动操作了 DOM 结构.不过问题也算找到根源了哈哈
|
![]() |
111
zazalu 120 天前
@mars0prince 恩恩好的(委屈.)
|
113
mars0prince 120 天前
@zazalu 多看看源码就知道了,vue 源码还是很简单的
|
114
SilentDepth 120 天前
@zazalu #108 同不理解为什么把这里 if 掉还不给个提示,父节点发生变化不应当是个常见场景啊
|
![]() |
115
leemove 120 天前
|
116
santom 120 天前
感觉是不是哪里写法可能有什么问题 (包括 不限于组件、传值、逻辑...)写过的项目中 列表加载更多 这些 等等 都是用 concat 去拼接的 复杂数据 vue 默认不会帮你监控变化值,所以出现了$set 这么个东西 但是我理解的 concat 重新赋值实际对于 vue 来说 是将值完全变了的 ( concat 返回新数组,也就是新引用,并非原数据),这样应该是可以监控到的
|
![]() |
117
zhouyg 120 天前
很好的问题,一下子直击最底层的技术实现,非常值得学习,对 vdom 和 dom 的理解很有帮助哈😄
|
![]() |
118
zhouyg 120 天前
感谢楼主提供的坑
|
![]() |
120
yiyi11 119 天前 via Android
我认为你非常适合当程序员。
|
![]() |
121
yiyi11 119 天前 via Android
至于“浪费一下午加晚上几小时的青春”,写一天的 crud 也不见得无悔青春。
|