From 39e1fffb9cb5195e8e3a34f02d883234184064a2 Mon Sep 17 00:00:00 2001 From: Evan You Date: Thu, 6 Jun 2019 12:35:49 +0800 Subject: [PATCH] wip: writable computed --- packages/observer/src/computed.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/observer/src/computed.ts b/packages/observer/src/computed.ts index f91bfb472c..81a6f7efb4 100644 --- a/packages/observer/src/computed.ts +++ b/packages/observer/src/computed.ts @@ -7,13 +7,13 @@ export interface ComputedValue { readonly effect: ReactiveEffect } -export function computed( - getter: (this: C, ctx: C) => T, - context?: C +export function computed( + getter: () => T, + setter?: (v: T) => void ): ComputedValue { let dirty: boolean = true let value: any = undefined - const runner = effect(() => getter.call(context, context), { + const runner = effect(getter, { lazy: true, // mark effect as computed so that it gets priority during trigger computed: true, @@ -34,6 +34,13 @@ export function computed( // This should also apply for chained computed properties. trackChildRun(runner) return value + }, + set value(newValue) { + if (setter) { + setter(newValue) + } else { + // TODO warn attempting to mutate readonly computed value + } } } knownValues.add(computedValue) -- 2.47.3