在 Vue 3 中,ref 和 reactive 是用來創建響應式數據的兩種不同方式,它們有各自的特點和適用場景。
-
ref:ref用于將基本類型(如:字符串、數字)轉化為一個帶有.value屬性的對象,這個屬性是響應式的。- 對于嵌套的數據結構,當使用
ref包裹時,內部的屬性也會自動變為響應式的,無需手動轉換,但是自動轉換時必須伴隨.value。 - 當你需要直接操作 DOM 元素或子組件實例時,
ref也可以用作特殊的屬性值,它會指向相應的 DOM 節點或子組件實例。
-
reactive:reactive接收一個普通的 JavaScript 對象然后返回該對象的響應式代理。它不會處理基本類型,只適用于對象(包括數組)。- 使用
reactive創建的對象的所有嵌套屬性都會變成響應式的,且是深層響應式的。 - 不適合直接用于基本類型。
選擇使用哪一個取決于你的具體需求。如果你需要包裝一個基本類型或者你想要一個更簡單的 API 來訪問和修改響應式數據,那么你可以使用 ref。如果你有一個復雜的對象并且希望整個對象都是響應式的,那么 reactive 可能更適合。
補充:ref創建的對象可以直接整體更新值,而reactive不行。
toRefs 和 toRef 是 Vue 3 中提供的工具函數,用于處理響應式對象的解構問題,確保解構后的屬性仍然保持其響應性。
-
toRefs:toRefs接收一個由reactive創建的響應式對象,并返回一個普通對象,其中原始對象的所有屬性都被轉換成了ref。- 這對于將響應式對象的屬性解構到單獨的變量中非常有用,同時確保每個解構出來的屬性都保留了它的響應性。
- 使用場景:當你需要解構一個響應式對象(例如從 setup 函數返回)并且不希望失去響應性時。
-
toRef:toRef可以用來創建一個引用(ref),它與源響應式對象上的某個特定屬性綁定。這意味著對這個ref的任何修改都會反映回原對象的對應屬性上,反之亦然。- 它適用于當你不想直接使用
reactive對象但又想保持對對象上某一個屬性的響應式連接時。 - 使用場景:當你只需要響應式地跟蹤對象上的一個或幾個屬性時,可以使用
toRef來創建這些屬性的響應式引用,而不需要將整個對象轉換為 refs。
兩者的主要區別在于 toRefs 是將整個響應式對象轉換成一個所有屬性都是 ref 的新對象,而 toRef 則是針對單個屬性創建一個與源屬性同步的 ref。
浙公網安備 33010602011771號