]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
wip: update writable computed API to match latest spec
authorEvan You <yyx990803@gmail.com>
Mon, 19 Aug 2019 16:05:07 +0000 (12:05 -0400)
committerEvan You <yyx990803@gmail.com>
Mon, 19 Aug 2019 16:05:07 +0000 (12:05 -0400)
packages/runtime-core/src/apiState.ts
packages/runtime-core/src/apiWatch.ts

index a40df59c165a16658ad613b693acdbea299a08a0..f50e14da216ad46c483fa59edef270d07ca92e45 100644 (file)
@@ -26,6 +26,7 @@ import {
 } from '@vue/reactivity'
 
 import { currentInstance } from './component'
+import { isFunction } from '@vue/shared'
 
 // record effects created during a component's setup() so that they can be
 // stopped when the component unmounts
@@ -35,12 +36,20 @@ export function recordEffect(effect: ReactiveEffect) {
   }
 }
 
-// a wrapped version of raw computed to tear it down at component unmount
-export function computed<T, C = null>(
-  getter: () => T,
-  setter?: (v: T) => void
+interface ComputedOptions<T> {
+  get: () => T
+  set: (v: T) => void
+}
+
+export function computed<T>(
+  getterOrOptions: (() => T) | ComputedOptions<T>
 ): ComputedRef<T> {
-  const c = _computed(getter, setter)
+  let c: ComputedRef<T>
+  if (isFunction(getterOrOptions)) {
+    c = _computed(getterOrOptions)
+  } else {
+    c = _computed(getterOrOptions.get, getterOrOptions.set)
+  }
   recordEffect(c.effect)
   return c
 }
index 0f9e51866e971339f278ef7662380854992383de..c396452b36f0936bcb046017136cd06a64ff431d 100644 (file)
@@ -6,7 +6,7 @@ import {
   ReactiveEffectOptions
 } from '@vue/reactivity'
 import { queueJob, queuePostFlushCb } from './scheduler'
-import { EMPTY_OBJ, isObject, isArray } from '@vue/shared'
+import { EMPTY_OBJ, isObject, isArray, isFunction } from '@vue/shared'
 import { recordEffect } from './apiState'
 
 export interface WatchOptions {
@@ -60,7 +60,7 @@ export function watch(
     | WatchOptions,
   options?: WatchOptions
 ): StopHandle {
-  if (typeof effectOrOptions === 'function') {
+  if (isFunction(effectOrOptions)) {
     // effect callback as 2nd argument - this is a source watcher
     return doWatch(effectOrSource, effectOrOptions, options)
   } else {