轉載請註明出處:葡萄城官網,葡萄城爲開發者提供專業的開發工具、解決方案和服務,賦能開發者。
原文參考: https://www.sitepoint.com/vue...
在上節中咱們對Vue2和Vue3中的響應式系統作了對比,帶你們瞭解了響應式系統的工做原理,今天咱們來進一步探索Vue3中的響應式系統API,爲了讓你們更好的理解和學習,將方法分組進行概括。vue
包括控制數據響應的最基本方法react
實際使用:瀏覽器
在此示例中,咱們探索了四種基本響應式方法的使用。微信
1.建立一個counterref對象,其值爲0。而後在視圖中放置兩個按鈕,用於增長和減小計數器的值。當使用發現計數器沒有做用。數據結構
2.其次建立一個person響應對象。在視圖中放置兩個輸入控件,分別用於編輯一我的的name和一我的的age。當咱們編輯人員的屬性時會當即更新。函數
3.建立一個math只讀對象。而後在視圖中設置一個按鈕,用於將math的PI屬性值加倍。該對象只可讀,不可修改。工具
4.建立一個alphabetNumbers對象,將其標記爲raw。取其前三位內容。設置一個按鈕,將Bproperty的值更改成3。咱們會發現能夠修改對象,但不會致使視圖從新渲染。性能
markRaw 方法很是適合咱們不須要響應的對象,例如一長串國家/地區代碼,顏色名稱及其對應的十六進制數字,等等。學習
5.測試和肯定咱們建立的每一個對象的類型,使用onMounted()的生命週期鉤子(lifecycle hook)觸發這些檢查。開發工具
該組包含上述全部四個類型檢查器:
該組包含其餘引用方法:
該組中的方法是ref,reactivity和readonly:
經過如下示例來感覺這些方法的使用:
本示例從建立settings淺引用對象開始,在視圖中添加兩個輸入控件以編輯其width和height屬性。但該屬性卻不能修改,爲了解決這個問題,添加一個按鈕,該按鈕能夠更改整個對象及其全部屬性。
接着建立一個settingsA淺層反應式代理,包含width和height屬性,和帶有x和y屬性的嵌套對象coords。在視圖中爲每一個屬性設置一個輸入控件。修改width和height屬性時,有響應更新,可是修改x和y屬性時卻沒有變化。
最後建立一個settingsB淺層只讀對象,屬性與settingsA相同。但此處widthorheight屬性只可讀,不能修改,x和y屬性能夠正常修改。
最後兩個示例中的嵌套對象coords均不受轉換的影響, Vue不會跟蹤它的任何修改,能夠自由修改。
接下來的三種方法用於將代理轉換爲ref或普通對象:
在下面的示例中,將展現這些轉換是如何工做:
在此示例中
1.建立一個基礎person反應對象,並將其用做源對象。
2.將name property轉換爲具備相同名稱的ref。在視圖中添加兩個輸入控件-一個用於name引用,另外一個用於nameproperty。當其中一個被修改,另外一個也會更新。
3.將其中一我的全部屬性轉換爲personDetails對象中包含的各個引用。在視圖中再次添加兩個輸入控件以測試剛剛建立的引用之一。發現personDetailsage與人的age屬性徹底同步。
4.將person響應性對象轉換爲rawPerson普通對象。在視圖中添加一個輸入控件以編輯rawPerson的hobby屬性,Vue並不進行跟蹤。
最後一組方法用於計算複雜值並監控某些值:
咱們繼續看看如下示例:
在此示例中,咱們建立了一個fullName計算變量,該變量的計算基於firstName和lastName。在視圖中添加了兩個輸入控件,用於編輯全名的兩個部分。修改任何部分fullName都會從新計算並更新結果。
接下來,咱們建立一個volumeref併爲其設置觀看效果,每次volume修改後都將運行回調函數。爲了驗證流程是否這樣,咱們在視圖中添加一個按鈕,該按鈕將音量增長一倍。接着在回調函數中設置一個條件,以測試該音量的值是否能夠分爲分紅三份,當它返回true時,將顯示一條警報消息。
最後,咱們建立一個stateref並設置一個watch函數來跟蹤它的更改。state改變執行函數。此外咱們添加了一個按鈕,用於在playing和paused之間切換狀態。狀態發生切換,則有提示。
咱們會發現,Vue 3響應式API爲各類用例提供了許多方法,API內容不少,在本教程中咱們僅探討了基礎知識。有關更深刻的探索,詳細信息和邊緣案例,請訪問Reactivity API文檔。
在本文中,咱們介紹了什麼是響應系統以及如何在Vue 2和Vue 3中實現該系統。一些Vue 2具的缺陷已經在Vue3中被很好的解決。最後讓咱們總結一下Vue3響應式系統的優缺點。
解決了Vue 2中的數據操做警告