From b9484543dbc37b8f8c6fafa6b36062ce7ad27f51 Mon Sep 17 00:00:00 2001 From: zhangenming <282126346@qq.com> Date: Fri, 6 May 2022 18:42:22 +0800 Subject: [PATCH] refactor(reactivity): make some expression simpler (#5131) --- packages/reactivity/src/baseHandlers.ts | 5 ++--- packages/reactivity/src/collectionHandlers.ts | 16 ++++++++++------ packages/runtime-core/src/renderer.ts | 5 ++--- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/reactivity/src/baseHandlers.ts b/packages/reactivity/src/baseHandlers.ts index 81dce9b9..7e564f29 100644 --- a/packages/reactivity/src/baseHandlers.ts +++ b/packages/reactivity/src/baseHandlers.ts @@ -125,9 +125,8 @@ function createGetter(isReadonly = false, shallow = false) { } if (isRef(res)) { - // ref unwrapping - does not apply for Array + integer key. - const shouldUnwrap = !targetIsArray || !isIntegerKey(key) - return shouldUnwrap ? res.value : res + // ref unwrapping - skip unwrap for Array + integer key. + return targetIsArray && isIntegerKey(key) ? res : res.value } if (isObject(res)) { diff --git a/packages/reactivity/src/collectionHandlers.ts b/packages/reactivity/src/collectionHandlers.ts index 0e9e19e8..09365f96 100644 --- a/packages/reactivity/src/collectionHandlers.ts +++ b/packages/reactivity/src/collectionHandlers.ts @@ -26,10 +26,12 @@ function get( target = (target as any)[ReactiveFlags.RAW] const rawTarget = toRaw(target) const rawKey = toRaw(key) - if (key !== rawKey) { - !isReadonly && track(rawTarget, TrackOpTypes.GET, key) + if (!isReadonly) { + if (key !== rawKey) { + track(rawTarget, TrackOpTypes.GET, key) + } + track(rawTarget, TrackOpTypes.GET, rawKey) } - !isReadonly && track(rawTarget, TrackOpTypes.GET, rawKey) const { has } = getProto(rawTarget) const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive if (has.call(rawTarget, key)) { @@ -47,10 +49,12 @@ function has(this: CollectionTypes, key: unknown, isReadonly = false): boolean { const target = (this as any)[ReactiveFlags.RAW] const rawTarget = toRaw(target) const rawKey = toRaw(key) - if (key !== rawKey) { - !isReadonly && track(rawTarget, TrackOpTypes.HAS, key) + if (!isReadonly) { + if (key !== rawKey) { + track(rawTarget, TrackOpTypes.HAS, key) + } + track(rawTarget, TrackOpTypes.HAS, rawKey) } - !isReadonly && track(rawTarget, TrackOpTypes.HAS, rawKey) return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey) diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts index ed698d21..33fe7a23 100644 --- a/packages/runtime-core/src/renderer.ts +++ b/packages/runtime-core/src/renderer.ts @@ -1544,11 +1544,11 @@ function baseCreateRenderer( // create reactive effect for rendering const effect = (instance.effect = new ReactiveEffect( componentUpdateFn, - () => queueJob(instance.update), + () => queueJob(update), instance.scope // track it in component's effect scope )) - const update = (instance.update = effect.run.bind(effect) as SchedulerJob) + const update: SchedulerJob = (instance.update = () => effect.run()) update.id = instance.uid // allowRecurse // #1801, #2043 component render effects should allow recursive updates @@ -1561,7 +1561,6 @@ function baseCreateRenderer( effect.onTrigger = instance.rtg ? e => invokeArrayFns(instance.rtg!, e) : void 0 - // @ts-ignore (for scheduler) update.ownerInstance = instance }