101
coang 2019-08-09 14:49:59 +08:00
vue 文档 对象 /数组变更 列明 concat 不能用 和直接赋值 vue 是无法监测的
|
102
crs0910 2019-08-09 14:50:49 +08:00
|
103
zazalu OP @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 2019-08-09 14:53:31 +08:00
@zazalu 这个问题不是一个简单的问题,是因为第三方依赖带来的错误,这种问题的分析是很复杂的,没必要因为踩了一个坑就灰心丧气,至少你现在已经明白了许多关于 vue 的新知识,下次就不会采坑了.
|
107
mars0prince 2019-08-09 14:54:08 +08:00
不明白你的例子是什么意思,最好有代码演示一下
你提供的在线演示 demo,是因为你把最后一个元素删掉了啊,vue 比较 children 时候需要添加 vnode,在最后一个元素前面 insert,你把它从 dom 上删了,还不改 vdom,肯定插不进去嘛,不信你把 p 标签用 div 包起来就没问题了 |
108
zazalu OP @leemove 看到了,但是为什么高版本反而去掉了报错呢.. 我感觉我因为这个问题浪费了一天的时间(非纯前端 er,一个打杂半吊子程序员)
|
109
mars0prince 2019-08-09 14:55:55 +08:00
不要去手动操作 dom,会导致 vdom 和 dom 不一致的情况,说了很多次了,这个不是 bug,是你瞎用
|
110
zazalu OP @mars0prince 我的例子里是 iview 的 Drawer 组件使用的 transfer-dom.js 的第 27 行代码,使用 js 手动操作了 DOM 结构.不过问题也算找到根源了哈哈
|
111
zazalu OP @mars0prince 恩恩好的(委屈.)
|
113
mars0prince 2019-08-09 14:58:45 +08:00
@zazalu 多看看源码就知道了,vue 源码还是很简单的
|
114
SilentDepth 2019-08-09 15:02:47 +08:00
@zazalu #108 同不理解为什么把这里 if 掉还不给个提示,父节点发生变化不应当是个常见场景啊
|
115
leemove 2019-08-09 15:06:40 +08:00
|
116
santom 2019-08-09 17:53:12 +08:00
感觉是不是哪里写法可能有什么问题 (包括 不限于组件、传值、逻辑...)写过的项目中 列表加载更多 这些 等等 都是用 concat 去拼接的 复杂数据 vue 默认不会帮你监控变化值,所以出现了$set 这么个东西 但是我理解的 concat 重新赋值实际对于 vue 来说 是将值完全变了的 ( concat 返回新数组,也就是新引用,并非原数据),这样应该是可以监控到的
|
117
zhouyg 2019-08-09 17:56:54 +08:00
很好的问题,一下子直击最底层的技术实现,非常值得学习,对 vdom 和 dom 的理解很有帮助哈😄
|
118
zhouyg 2019-08-09 17:57:51 +08:00
感谢楼主提供的坑
|
119
zazalu OP @santom 是 iview 的手动 dom 操作导致 vue 懵逼,同时 2.6 版本又不做警告,如上述 2.2 版本左右的都会报错
|
120
yiyi11 2019-08-10 13:59:44 +08:00 via Android
我认为你非常适合当程序员。
|
121
yiyi11 2019-08-10 14:01:42 +08:00 via Android
至于“浪费一下午加晚上几小时的青春”,写一天的 crud 也不见得无悔青春。
|