From f2116054a0eee547461892fccf917d140488d66a Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 29 May 2019 09:19:01 +0800 Subject: [PATCH] refactor: use shared options for component effect runners --- packages/runtime-core/src/createRenderer.ts | 83 ++++++++++----------- 1 file changed, 41 insertions(+), 42 deletions(-) diff --git a/packages/runtime-core/src/createRenderer.ts b/packages/runtime-core/src/createRenderer.ts index 5067fd4dc6..b379c44639 100644 --- a/packages/runtime-core/src/createRenderer.ts +++ b/packages/runtime-core/src/createRenderer.ts @@ -18,6 +18,10 @@ import { TEXT, CLASS, STYLE, PROPS, KEYED, UNKEYED } from './patchFlags' import { queueJob, queuePostFlushCb, flushPostFlushCbs } from './scheduler' import { effect, stop } from '@vue/observer' +const sharedEffectOptions = { + scheduler: queueJob +} + function isSameType(n1: VNode, n2: VNode): boolean { return n1.type === n2.type && n1.key === n2.key } @@ -347,50 +351,45 @@ export function createRenderer(options: RendererOptions) { const instance: ComponentInstance = (vnode.component = createComponentInstance( vnode )) - instance.update = effect( - () => { - if (!instance.vnode) { - // initial mount - instance.vnode = vnode - const subTree = (instance.subTree = renderComponentRoot(instance)) - if (instance.bm !== null) { - invokeHooks(instance.bm) - } - patch(null, subTree, container, anchor) - vnode.el = subTree.el - // mounted hook - if (instance.m !== null) { - queuePostFlushCb(instance.m) - } - } else { - // this is triggered by processComponent with `next` already set - const { next } = instance - if (next != null) { - next.component = instance - instance.vnode = next - instance.next = null - } - const prevTree = instance.subTree as VNode - const nextTree = (instance.subTree = renderComponentRoot(instance)) - patch( - prevTree, - nextTree, - container || hostParentNode(prevTree.el), - anchor || getNextHostNode(prevTree) - ) - if (next != null) { - next.el = nextTree.el - } - // upated hook - if (instance.u !== null) { - queuePostFlushCb(instance.u) - } + instance.update = effect(() => { + if (!instance.vnode) { + // initial mount + instance.vnode = vnode + const subTree = (instance.subTree = renderComponentRoot(instance)) + if (instance.bm !== null) { + invokeHooks(instance.bm) + } + patch(null, subTree, container, anchor) + vnode.el = subTree.el + // mounted hook + if (instance.m !== null) { + queuePostFlushCb(instance.m) + } + } else { + // this is triggered by processComponent with `next` already set + const { next } = instance + if (next != null) { + next.component = instance + instance.vnode = next + instance.next = null + } + const prevTree = instance.subTree as VNode + const nextTree = (instance.subTree = renderComponentRoot(instance)) + patch( + prevTree, + nextTree, + container || hostParentNode(prevTree.el), + anchor || getNextHostNode(prevTree) + ) + if (next != null) { + next.el = nextTree.el + } + // upated hook + if (instance.u !== null) { + queuePostFlushCb(instance.u) } - }, - { - scheduler: queueJob } - ) + }, sharedEffectOptions) } function patchChildren( -- 2.47.3