feat(reactivity): add support for customRef API
This commit is contained in:
@@ -1,4 +1,13 @@
|
||||
export { ref, unref, shallowRef, isRef, toRefs, Ref, UnwrapRef } from './ref'
|
||||
export {
|
||||
ref,
|
||||
unref,
|
||||
shallowRef,
|
||||
isRef,
|
||||
toRefs,
|
||||
customRef,
|
||||
Ref,
|
||||
UnwrapRef
|
||||
} from './ref'
|
||||
export {
|
||||
reactive,
|
||||
isReactive,
|
||||
|
||||
@@ -70,6 +70,31 @@ export function unref<T>(ref: T): T extends Ref<infer V> ? V : T {
|
||||
return isRef(ref) ? (ref.value as any) : ref
|
||||
}
|
||||
|
||||
export type CustomRefFactory<T> = (
|
||||
track: () => void,
|
||||
trigger: () => void
|
||||
) => {
|
||||
get: () => T
|
||||
set: (value: T) => void
|
||||
}
|
||||
|
||||
export function customRef<T>(factory: CustomRefFactory<T>): Ref<T> {
|
||||
const { get, set } = factory(
|
||||
() => track(r, TrackOpTypes.GET, 'value'),
|
||||
() => trigger(r, TriggerOpTypes.SET, 'value')
|
||||
)
|
||||
const r = {
|
||||
_isRef: true,
|
||||
get value() {
|
||||
return get()
|
||||
},
|
||||
set value(v) {
|
||||
set(v)
|
||||
}
|
||||
}
|
||||
return r as any
|
||||
}
|
||||
|
||||
export function toRefs<T extends object>(
|
||||
object: T
|
||||
): { [K in keyof T]: Ref<T[K]> } {
|
||||
|
||||
Reference in New Issue
Block a user