2023/08/11
Vue 是一個前端框架,它可以讓我們用簡單的方式開發出動態的網頁。學習使用 Vue 的一大重點就是它的響應式,也就是說當使用者在網頁改變了資料,網頁畫面也會自動更新。這篇文章將介紹什麼是響應式,以及如何使用 Vue 提供的 ref()
和 reactive()
函數來定義響應式的數據。
在 JavaScript 中,我們可以用各種類型的值來儲存資料,例如數字、字串、陣列、物件等。這些值都是可變的,也就是說,我們可以隨時修改它們的內容。例如:
但是,這些值並不是響應式的,也就是說,當我們修改了它們,並不會觸發任何其他的動作。例如,如果我們想要在網頁上顯示這些值,我們必須手動更新畫面。例如:
這段程式碼會在網頁上顯示 x = 1
和 y = [1, 2, 3]
。但是,如果我們在 console 中執行 x = x + 1
或 y.push(4)
,網頁上的內容並不會改變。這是因為 x
和 y
只是普通的 JavaScript 值,它們並沒有和 Vue 的資料產生關聯。
要讓 Vue 的資料和畫面產生關聯,我們必須使用 Vue 提供的響應式的值。響應式的值和普通的值有以下幾點不同:
雖然 Vue 提供了方便的方式來創建和使用響應式的值,但是我們仍然要注意一些可能導致響應式失效的情況。以下是一些常見的例子:
這是因為 Vue 在創建響應式的物件時,只會對已經存在的屬性進行追蹤,如果我們後來新增了新的屬性,Vue 就無法知道它的變化。要解決這個問題,我們可以使用 Vue.set(obj, 'b', 2)
或 obj = { ...obj, b: 2 }
來新增屬性,這樣 Vue 就可以正確地更新響應式。
這是因為 Vue 在創建 y
時,只會把 x
的值複製過來,而不會建立任何關聯。如果我們後來修改了 x
的值,Vue 就無法知道它的變化。要解決這個問題,我們可以使用 computed()
函數來定義 y
,這樣 Vue 就可以正確地更新響應式。例如:
要創建和使用響應式的值,Vue 提供了兩個主要的函數:ref()
和 reactive()
。這兩個函數都可以把普通的值轉換成響應式的值,但是它們有一些不同的用法和特點,我們來看看它們的差異和適用的情況。
ref()
函數可以把一個基本類型的值(例如數字、字串、布林等)轉換成一個響應式的物件,這個物件有一個 value
屬性,用來存放原始的值。例如:
reactive()
函數可以把一個複雜類型的值(例如物件、陣列、Map、Set等)轉換成一個響應式的物件,這個物件會保留原始的結構和方法,但是它的屬性或元素都會變成響應式的。例如:
ref()
和 reactive()
都可以用來定義響應式的值,但是它們有一些不同的使用場景和注意事項。以下是一些常見的規則:
ref()
,因為這樣可以避免在使用時忘記加上 .value
。reactive()
,因為這樣可以保持原始的結構和方法,而不需要對每個屬性或元素都使用 ref()
。readonly()
函數來包裝 ref()
或 reactive()
,這樣可以避免意外地修改它們。computed()
函數來包裝 ref()
或 reactive()
,這樣可以讓它們根據其他響應式的值自動更新。Vue 的響應式是一個強大而方便的特性,它可以讓我們用簡單的方式開發出動態的網頁。在 Vue 中,我們可以使用 ref()
和 reactive()
函數來定義和使用響應式的值。這兩個函數都可以把普通的值轉換成響應式的值,但是它們有一些不同的用法和特點。我們要根據不同的情況選擇合適的函數,並且注意一些可能導致響應式失效的情況。這樣,我們就可以充分利用 Vue 的響應式,開發出高效而美觀的網頁。