Просмотр исходного кода

fix: should always generate slot for non-null children

Evan You 7 лет назад
Родитель
Сommit
7c389606a4
2 измененных файлов с 5 добавлено и 4 удалено
  1. 2 0
      packages/core/src/h.ts
  2. 3 4
      packages/core/src/vdom.ts

+ 2 - 0
packages/core/src/h.ts

@@ -109,6 +109,8 @@ export const h = ((tag: ElementType, data?: any, children?: any): VNode => {
 
   // if value is observable, create a clone of original
   // so that we can normalize its class/style
+  // since this guard is only placed here, this means any direct createXXXVnode
+  // functions only accept fresh data objects.
   if (isObservable(data)) {
     data = Object.assign({}, data)
   }

+ 3 - 4
packages/core/src/vdom.ts

@@ -217,12 +217,11 @@ export function createComponentVNode(
       if (isFunction(children)) {
         // function as children
         slots = { default: children }
-      } else if (isArray(children) || (children as any)._isVNode) {
-        // direct vnode children
-        slots = { default: () => children }
-      } else if (isObject(children)) {
+      } else if (isObject(children) && !(children as any)._isVNode) {
         // slot object as children
         slots = children
+      } else {
+        slots = { default: () => children }
       }
       slots = normalizeSlots(slots)
     }