vue-design icon indicating copy to clipboard operation
vue-design copied to clipboard

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

Open moonlight718 opened this issue 4 years ago • 1 comments

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;
  }
}

moonlight718 avatar Feb 29 '20 12:02 moonlight718

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

a1mersnow avatar Dec 21 '21 01:12 a1mersnow