import { effect, ReactiveEffect, activeReactiveEffectStack } from './effect'
-import { UnwrapNestedRefs, knownValues } from './ref'
+import { UnwrapNestedRefs, knownRefs } from './ref'
export interface ComputedRef<T> {
readonly value: UnwrapNestedRefs<T>
}
}
}
- knownValues.add(computedValue)
+ knownRefs.add(computedValue)
return computedValue
}
-export { ref, isRef, Ref, UnwrapRef } from './ref'
+export { ref, isRef, toRefs, Ref, UnwrapRef } from './ref'
export {
reactive,
isReactive,
import { isObject } from '@vue/shared'
import { reactive } from './reactive'
-export const knownValues = new WeakSet()
+export const knownRefs = new WeakSet()
export interface Ref<T> {
value: UnwrapNestedRefs<T>
trigger(v, OperationTypes.SET, '')
}
}
- knownValues.add(v)
- return v as any
+ knownRefs.add(v)
+ return v as Ref<T>
}
export function isRef(v: any): v is Ref<any> {
- return knownValues.has(v)
+ return knownRefs.has(v)
+}
+
+export function toRefs<T extends object>(
+ object: T
+): { [K in keyof T]: Ref<T[K]> } {
+ const ret: any = {}
+ for (const key in object) {
+ ret[key] = toProxyRef(object, key)
+ }
+ return ret
+}
+
+function toProxyRef<T extends object, K extends keyof T>(
+ object: T,
+ key: K
+): Ref<T[K]> {
+ const v = {
+ get value() {
+ return object[key]
+ },
+ set value(newVal) {
+ object[key] = newVal
+ }
+ }
+ knownRefs.add(v)
+ return v as Ref<T[K]>
}
type BailTypes =
import { currentInstance } from './component'
-import { immutable } from './apiState'
+import { immutable } from './apiReactivity'
import { isObject } from '@vue/shared'
export interface InjectionKey<T> extends Symbol {}
export {
ref,
isRef,
+ toRefs,
reactive,
isReactive,
immutable,
} from '@vue/reactivity'
import { queueJob, queuePostFlushCb } from './scheduler'
import { EMPTY_OBJ, isObject, isArray, isFunction } from '@vue/shared'
-import { recordEffect } from './apiState'
+import { recordEffect } from './apiReactivity'
export interface WatchOptions {
lazy?: boolean
export { Slot, Slots } from './componentSlots'
export { PropType, ComponentPropsOptions } from './componentProps'
-export * from './apiState'
+export * from './apiReactivity'
export * from './apiWatch'
export * from './apiLifecycle'
export * from './apiInject'