expect(toValue(c)).toBe(3)
expect(toValue(d)).toBe(4)
})
+
+ test('ref w/ customRef w/ getterRef w/ objectRef should store value cache', () => {
+ const refValue = ref(1)
+ // @ts-expect-error private field
+ expect(refValue._value).toBe(1)
+
+ let customRefValueCache = 0
+ const customRefValue = customRef((track, trigger) => {
+ return {
+ get() {
+ track()
+ return customRefValueCache
+ },
+ set(value: number) {
+ customRefValueCache = value
+ trigger()
+ },
+ }
+ })
+ customRefValue.value
+
+ // @ts-expect-error internal field
+ expect(customRefValue._value).toBe(0)
+
+ const getterRefValue = toRef(() => 1)
+ getterRefValue.value
+ // @ts-expect-error internal field
+ expect(getterRefValue._value).toBe(1)
+
+ const objectRefValue = toRef({ value: 1 }, 'value')
+ objectRefValue.value
+ // @ts-expect-error internal field
+ expect(objectRefValue._value).toBe(1)
+ })
})
public readonly [ReactiveFlags.IS_REF] = true
+ public _value: T = undefined!
+
constructor(factory: CustomRefFactory<T>) {
const dep = (this.dep = new Dep())
const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep))
}
get value() {
- return this._get()
+ return (this._value = this._get())
}
set value(newVal) {
class ObjectRefImpl<T extends object, K extends keyof T> {
public readonly [ReactiveFlags.IS_REF] = true
+ public _value: T[K] = undefined!
constructor(
private readonly _object: T,
get value() {
const val = this._object[this._key]
- return val === undefined ? this._defaultValue! : val
+ return (this._value = val === undefined ? this._defaultValue! : val)
}
set value(newVal) {
class GetterRefImpl<T> {
public readonly [ReactiveFlags.IS_REF] = true
public readonly [ReactiveFlags.IS_READONLY] = true
+ public _value: T = undefined!
+
constructor(private readonly _getter: () => T) {}
get value() {
- return this._getter()
+ return (this._value = this._getter())
}
}