_trigger!()
expect(dummy).toBe(2)
})
+
+ test('should not trigger when setting value to same proxy', () => {
+ const obj = reactive({ count: 0 })
+
+ const a = ref(obj)
+ const spy1 = jest.fn(() => a.value)
+
+ effect(spy1)
+
+ a.value = obj
+ expect(spy1).toBeCalledTimes(1)
+
+ const b = shallowRef(obj)
+ const spy2 = jest.fn(() => b.value)
+
+ effect(spy2)
+
+ b.value = obj
+ expect(spy2).toBeCalledTimes(1)
+ })
})
}
class RefImpl<T> {
+ private _rawValue: T
+
private _value: T
public readonly __v_isRef = true
- constructor(private _rawValue: T, public readonly _shallow: boolean) {
- this._value = _shallow ? _rawValue : convert(_rawValue)
+ constructor(value: T, public readonly _shallow = false) {
+ this._rawValue = _shallow ? value : toRaw(value)
+ this._value = _shallow ? value : convert(value)
}
get value() {
}
set value(newVal) {
- if (hasChanged(toRaw(newVal), this._rawValue)) {
+ newVal = this._shallow ? newVal : toRaw(newVal)
+ if (hasChanged(newVal, this._rawValue)) {
this._rawValue = newVal
this._value = this._shallow ? newVal : convert(newVal)
trigger(toRaw(this), TriggerOpTypes.SET, 'value', newVal)