在vue 3中,利用響應式系統更新視圖是核心機制。本文探討一個常見場景:通過類屬性包裝Ref對象后,是否依然能夠觸發視圖更新。
我們來看一段示例代碼:
class Foo { ref: Ref<number>; get value() { return this.ref?.value; } set value(nv: number) { this.ref.value = nv; } constructor() { this.ref = ref(0); } } const foo = new Foo();
在模板中,我們使用{{ foo.value }}顯示foo.value。點擊按鈕,foo.value自增。關鍵問題是:通過get和set方法間接修改ref后,視圖是否會更新?
答案是肯定的。這是因為點擊按鈕觸發事件,調用foo.value++。這會執行set value方法,進而執行this.ref.value = nv,直接修改ref的值。由于ref是響應式的,這個修改會觸發依賴于它的視圖更新。
立即學習“前端免費學習筆記(深入)”;
流程如下:
- 按鈕點擊: 觸發點擊事件。
- 執行自增: foo.value++被執行。
- 調用setter: set value方法被調用。
- 修改ref值: this.ref.value = nv直接修改ref。
- 視圖更新: Vue 3的響應式系統檢測到ref值的改變,并更新視圖。
所以,即使間接修改ref,Vue 3的響應式系統依然能夠準確捕捉變化,并高效地更新視圖。 這證明了Vue 3響應式系統的強大和可靠性,即使在復雜的數據結構中也能保持其功能。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END