feat(reactivity): expose unref and shallowRef
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
export { ref, isRef, toRefs, Ref, UnwrapRef } from './ref'
|
||||
export { ref, unref, shallowRef, isRef, toRefs, Ref, UnwrapRef } from './ref'
|
||||
export {
|
||||
reactive,
|
||||
isReactive,
|
||||
|
||||
@@ -31,10 +31,22 @@ export function isRef(r: any): r is Ref {
|
||||
export function ref<T>(value: T): T extends Ref ? T : Ref<T>
|
||||
export function ref<T = any>(): Ref<T>
|
||||
export function ref(value?: unknown) {
|
||||
return createRef(value)
|
||||
}
|
||||
|
||||
export function shallowRef<T>(value: T): T extends Ref ? T : Ref<T>
|
||||
export function shallowRef<T = any>(): Ref<T>
|
||||
export function shallowRef(value?: unknown) {
|
||||
return createRef(value, true)
|
||||
}
|
||||
|
||||
function createRef(value: unknown, shallow = false) {
|
||||
if (isRef(value)) {
|
||||
return value
|
||||
}
|
||||
value = convert(value)
|
||||
if (!shallow) {
|
||||
value = convert(value)
|
||||
}
|
||||
const r = {
|
||||
_isRef: true,
|
||||
get value() {
|
||||
@@ -42,7 +54,7 @@ export function ref(value?: unknown) {
|
||||
return value
|
||||
},
|
||||
set value(newVal) {
|
||||
value = convert(newVal)
|
||||
value = shallow ? newVal : convert(newVal)
|
||||
trigger(
|
||||
r,
|
||||
TriggerOpTypes.SET,
|
||||
@@ -54,6 +66,10 @@ export function ref(value?: unknown) {
|
||||
return r
|
||||
}
|
||||
|
||||
export function unref<T>(ref: T): T extends Ref<infer V> ? V : T {
|
||||
return isRef(ref) ? (ref.value as any) : ref
|
||||
}
|
||||
|
||||
export function toRefs<T extends object>(
|
||||
object: T
|
||||
): { [K in keyof T]: Ref<T[K]> } {
|
||||
|
||||
Reference in New Issue
Block a user