Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

patch一章中的 patchChildren。旧VNode只有一个节点,新的有多个。旧的节点是不是可以复用的,不用删除? #284

Open
cn1001wang opened this issue Jul 22, 2020 · 1 comment

Comments

@cn1001wang
Copy link

可以给网站加个评论功能吗,我在patch一章中的 patchChildren 一节 ,有个不同意见。
image

旧的 VNode 是一个只有一个子节点的 div 标签,而新的 VNode 是一个拥有多个子节点的 div 标签。最终的效果是旧的单个子节点被移除,新的多个子节点全都被添加上去。

这个旧的节点是不是可以复用的,不用删除。假设现在v-for渲染一个数组,开始只有一个子元素,后来push一个新的。这时候无需删除旧的子节点,而是应该只添加一个新增节点。

源码部分我还在阅读,如有理解方面问题,请指出

@AmJunh
Copy link

AmJunh commented Jul 26, 2020

image
先更新自身, 然后更新子节点
子节点时会判断,

  1. 都存在; updateChildren更新, 在这个函数里进行子节点的比对和更新, 也包括你说的节点是否可重用的判断;
  2. 新的存在, 老的不存在, 重置当前dom内容为空字符串, 调用addVnodes;
  3. 新的不存在, 删除老的
    等等

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants