瀏覽代碼

wip: fix more tests

Evan You 7 年之前
父節點
當前提交
9d1f0f248d

+ 34 - 14
packages/runtime-core/src/createRenderer.ts

@@ -227,9 +227,13 @@ export function createRenderer(options: RendererOptions) {
       // kept-alive
       // kept-alive
       activateComponentInstance(vnode, container, endNode)
       activateComponentInstance(vnode, container, endNode)
     } else {
     } else {
-      queueJob(() => {
+      if (__COMPAT__) {
         mountComponentInstance(vnode, container, isSVG, endNode)
         mountComponentInstance(vnode, container, isSVG, endNode)
-      }, flushHooks)
+      } else {
+        queueJob(() => {
+          mountComponentInstance(vnode, container, isSVG, endNode)
+        }, flushHooks)
+      }
     }
     }
   }
   }
 
 
@@ -257,8 +261,7 @@ export function createRenderer(options: RendererOptions) {
       queueJob(handle.runner)
       queueJob(handle.runner)
     })
     })
 
 
-    // we are using vnode.ref to store the functional component's update job
-    queueJob(() => {
+    const doMount = () => {
       handle.runner = autorun(
       handle.runner = autorun(
         () => {
         () => {
           if (handle.prevTree) {
           if (handle.prevTree) {
@@ -270,6 +273,9 @@ export function createRenderer(options: RendererOptions) {
             const nextTree = (handle.prevTree = current.children = renderFunctionalRoot(
             const nextTree = (handle.prevTree = current.children = renderFunctionalRoot(
               current
               current
             ))
             ))
+            queuePostCommitHook(() => {
+              current.el = nextTree.el
+            })
             patch(
             patch(
               prevTree as MountedVNode,
               prevTree as MountedVNode,
               nextTree,
               nextTree,
@@ -277,7 +283,6 @@ export function createRenderer(options: RendererOptions) {
               current as MountedVNode,
               current as MountedVNode,
               isSVG
               isSVG
             )
             )
-            current.el = nextTree.el
             if (__DEV__) {
             if (__DEV__) {
               popWarningContext()
               popWarningContext()
             }
             }
@@ -289,8 +294,10 @@ export function createRenderer(options: RendererOptions) {
             const subTree = (handle.prevTree = vnode.children = renderFunctionalRoot(
             const subTree = (handle.prevTree = vnode.children = renderFunctionalRoot(
               vnode
               vnode
             ))
             ))
+            queuePostCommitHook(() => {
+              vnode.el = subTree.el as RenderNode
+            })
             mount(subTree, container, vnode as MountedVNode, isSVG, endNode)
             mount(subTree, container, vnode as MountedVNode, isSVG, endNode)
-            vnode.el = subTree.el as RenderNode
             if (__DEV__) {
             if (__DEV__) {
               popWarningContext()
               popWarningContext()
             }
             }
@@ -300,7 +307,14 @@ export function createRenderer(options: RendererOptions) {
           scheduler: queueUpdate
           scheduler: queueUpdate
         }
         }
       )
       )
-    })
+    }
+
+    // we are using vnode.ref to store the functional component's update job
+    if (__COMPAT__) {
+      doMount()
+    } else {
+      queueJob(doMount)
+    }
   }
   }
 
 
   function mountText(
   function mountText(
@@ -1200,6 +1214,10 @@ export function createRenderer(options: RendererOptions) {
 
 
           queuePostCommitHook(() => {
           queuePostCommitHook(() => {
             vnode.el = instance.$vnode.el
             vnode.el = instance.$vnode.el
+            if (__COMPAT__) {
+              // expose __vue__ for devtools
+              ;(vnode.el as any).__vue__ = instance
+            }
             if (vnode.ref) {
             if (vnode.ref) {
               vnode.ref($proxy)
               vnode.ref($proxy)
             }
             }
@@ -1219,11 +1237,6 @@ export function createRenderer(options: RendererOptions) {
             endNode
             endNode
           )
           )
 
 
-          if (__COMPAT__) {
-            // expose __vue__ for devtools
-            ;(vnode.el as any).__vue__ = instance
-          }
-
           instance._mounted = true
           instance._mounted = true
         }
         }
       },
       },
@@ -1435,11 +1448,18 @@ export function createRenderer(options: RendererOptions) {
         container.vnode = null
         container.vnode = null
       }
       }
     }
     }
-    return nextTick(() => {
+    if (__COMPAT__) {
+      flushHooks()
       return vnode && vnode.flags & VNodeFlags.COMPONENT_STATEFUL
       return vnode && vnode.flags & VNodeFlags.COMPONENT_STATEFUL
         ? (vnode.children as ComponentInstance).$proxy
         ? (vnode.children as ComponentInstance).$proxy
         : null
         : null
-    })
+    } else {
+      return nextTick(() => {
+        return vnode && vnode.flags & VNodeFlags.COMPONENT_STATEFUL
+          ? (vnode.children as ComponentInstance).$proxy
+          : null
+      })
+    }
   }
   }
 
 
   return { render }
   return { render }

+ 0 - 3
packages/runtime-test/src/nodeOps.ts

@@ -63,9 +63,6 @@ export function dumpOps(): NodeOp[] {
 }
 }
 
 
 function createElement(tag: string): TestElement {
 function createElement(tag: string): TestElement {
-  if (nodeId === 5) {
-    throw new Error('foo')
-  }
   const node: TestElement = {
   const node: TestElement = {
     id: nodeId++,
     id: nodeId++,
     type: NodeTypes.ELEMENT,
     type: NodeTypes.ELEMENT,

+ 1 - 0
packages/scheduler/src/patchNodeOps.ts

@@ -1,3 +1,4 @@
+// temporary hack to wrap nodeOps so it works with time-slicing
 import { NodeOps } from '@vue/runtime-core'
 import { NodeOps } from '@vue/runtime-core'
 import { nodeOps } from '../../runtime-dom/src/nodeOps'
 import { nodeOps } from '../../runtime-dom/src/nodeOps'
 import { nodeOps as testNodeOps } from '../../runtime-test/src/nodeOps'
 import { nodeOps as testNodeOps } from '../../runtime-test/src/nodeOps'

+ 1 - 1
packages/vue-compat/__tests__/compat.spec.ts

@@ -1,6 +1,6 @@
 ;(global as any).__COMPAT__ = true
 ;(global as any).__COMPAT__ = true
 
 
-import Vue from '../src/index-compat'
+import Vue from '../src/index'
 
 
 describe('2.x compat build', async () => {
 describe('2.x compat build', async () => {
   test('should work', async () => {
   test('should work', async () => {