]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix: Suspense should include into dynamic children (#653)
authorlikui <2218301630@qq.com>
Wed, 22 Jan 2020 15:45:27 +0000 (23:45 +0800)
committerEvan You <yyx990803@gmail.com>
Wed, 22 Jan 2020 15:45:27 +0000 (10:45 -0500)
fix #649

packages/runtime-core/__tests__/vnode.spec.ts
packages/runtime-core/src/vnode.ts

index 656d27644b99f5726676181810e09c3fb1b89e77..ea9fc02bda416e3c1caaa3eaa394b00d509a8849 100644 (file)
@@ -232,7 +232,7 @@ describe('vnode', () => {
   })
 
   describe('dynamic children', () => {
-    test('single call openBlock', () => {
+    test('with patchFlags', () => {
       const hoist = createVNode('div')
       let vnode1
       const vnode = (openBlock(),
@@ -259,5 +259,38 @@ describe('vnode', () => {
       expect(vnode.dynamicChildren).toStrictEqual([vnode1, vnode2])
       expect(vnode2.dynamicChildren).toStrictEqual([vnode3])
     })
+
+    test('with stateful component', () => {
+      const hoist = createVNode('div')
+      let vnode1
+      const vnode = (openBlock(),
+      createBlock('div', null, [
+        hoist,
+        (vnode1 = createVNode({}, null, 'text'))
+      ]))
+      expect(vnode.dynamicChildren).toStrictEqual([vnode1])
+    })
+
+    test('with functional component', () => {
+      const hoist = createVNode('div')
+      let vnode1
+      const vnode = (openBlock(),
+      createBlock('div', null, [
+        hoist,
+        (vnode1 = createVNode(() => {}, null, 'text'))
+      ]))
+      expect(vnode.dynamicChildren).toStrictEqual([vnode1])
+    })
+
+    test('with suspense', () => {
+      const hoist = createVNode('div')
+      let vnode1
+      const vnode = (openBlock(),
+      createBlock('div', null, [
+        hoist,
+        (vnode1 = createVNode(() => {}, null, 'text'))
+      ]))
+      expect(vnode.dynamicChildren).toStrictEqual([vnode1])
+    })
   })
 })
index 1f08d5cab5b678da39274010cd046cb48b81f474..33c177d6f5c7ebe01002f04464b3ff3ae307fc76 100644 (file)
@@ -274,6 +274,7 @@ export function createVNode(
     shouldTrack > 0 &&
     currentBlock !== null &&
     (patchFlag > 0 ||
+      shapeFlag & ShapeFlags.SUSPENSE ||
       shapeFlag & ShapeFlags.STATEFUL_COMPONENT ||
       shapeFlag & ShapeFlags.FUNCTIONAL_COMPONENT)
   ) {