HcySunYang / vue-design

📖 master分支:《渲染器》
http://hcysun.me/vue-design/zh/
6k stars 916 forks source link

patchFragment 中当 nextVNode 的 childFlags 为 NO_CHILDREN el 的引用不对 #271

Open moonlight718 opened 4 years ago

moonlight718 commented 4 years ago
function patchFragment (prevVNode, nextVNode, container) {
  patchChildren(
    prevVNode.childFlags,
    nextVNode.childFlags,
    prevVNode.children,
    nextVNode.children,
    container
  );
  switch (nextVNode.childFlags) {
    case ChildrenFlags.SINGLE_VNODE:
      nextVNode.el = nextVNode.children.el;
      break;
    case ChildrenFlags.NO_CHILDREN:
       // 如果 prevVNode 的子节点有一个或者多个
      // 此时 prevVNode.el 应该指向 children 的第一个子节点。
      // 当nextVNode 没有子节点时,它的 el 应该引用一个空文本节点,但是绝对不是prevVNode.e l
      nextVNode.el = prevVNode.el;
      break;
    default:
      nextVNode.el = nextVNode.children[0].el;
      break;
  }
}
a1mersnow commented 2 years ago

没错 我也感觉这个地方有点问题…… 应该判断 prevVNode.childFlags,如果是 SINGLE 或者 MULTIPLE 则应该 createTextVnode('') 然后 mount 然后把 nextVNode.el 指向这个 vnode 的 el