From b226760ec855b7b3c7c07cea179b6bc566440979 Mon Sep 17 00:00:00 2001 From: e_the <52271267+ethesky-rcplatformhk@users.noreply.github.com> Date: Sat, 5 Mar 2022 16:03:57 +0800 Subject: [PATCH] fix(reactive-vue): fix vue3 render dependency collection broken (#2904) --- .../reactive-vue/src/hooks/useObserver.ts | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/packages/reactive-vue/src/hooks/useObserver.ts b/packages/reactive-vue/src/hooks/useObserver.ts index 7f739d20cb7..196b029cb2b 100644 --- a/packages/reactive-vue/src/hooks/useObserver.ts +++ b/packages/reactive-vue/src/hooks/useObserver.ts @@ -16,25 +16,34 @@ export const useObserver = (options?: IObserverOptions) => { onBeforeUnmount(disposeTracker) - Object.defineProperty(vm, 'update', { + Object.defineProperty(vm, 'effect', { get() { // https://github.com/alibaba/formily/issues/2655 return vm['_updateEffect'] || {} }, set(newValue) { - disposeTracker() + vm['_updateEffectRun'] = newValue.run + const newTracker = () => { + disposeTracker() + tracker = new Tracker(() => { + if (options?.scheduler && typeof options.scheduler === 'function') { + options.scheduler(update) + } else { + update() + } + }) + } + const update = function () { + newTracker() + let refn: any = null + tracker?.track(() => { + refn = vm['_updateEffectRun'].call(newValue) + }) + return refn + } - const update = () => tracker?.track(newValue) - - tracker = new Tracker(() => { - if (options?.scheduler && typeof options.scheduler === 'function') { - options.scheduler(update) - } else { - update() - } - }) - - vm['_updateEffect'] = update + newValue.run = update + vm['_updateEffect'] = newValue }, }) }