關於ref和reactive的問題
如果你使用過Vue3,你知道的,在Vue3 中有兩個非常常用的響應式API: reactive 和ref。它們會把我們想要追蹤的數據變成響應式。
我們一直被告知,ref 可以被用來建立基本型別和引用型別的回應式。而對於引用類型,底層也是轉換為 reactive 來進行響應式處理。既然如此,為什麼還需要使用 reactive?全部使用 ref 不就可以了嗎?
雖然 ref 建立的響應式資料在腳本中需要使用 .value 才能訪問,但在這種情況下,這不會對程式產生太大的影響。範本會自動新增 .value,因此不需要在範本中使用 .value 存取。
既然這二者基本上沒撒差別,但是還是暴露了 reactive 這個 API,難道有什麼場景是 reactive 能做而 ref 做不了的?
簡單了解 ref & reactive
我們先簡單了解這兩個 API。
reactive
傳回物件的響應式副本,響應式轉換是「深層」的——它影響所有巢狀 property。我們一般這樣寫。
const obj = reactive({ count: 0 })
並且可以直接使用。
const count = obj.count
ref
受一個內部值並傳回一個響應式且可變的 ref 物件。 The ref object has only one .value property, which points to the inner value.。我們一般是這樣寫。
const data = ref(xxx)
引用的時候,一般會透過data.value的方式引用。
const dataValue = data.value
透過追蹤 Vue3 的原始碼可以證明,當我們呼叫 ref 方法來定義響應式資料時,當參數為物件型別時,其實裡面用的是 reactive 方法。也就是說,data.value 上面的屬性是透過 reactive 方法來建立的。
注意:
reactive 能做的ref 也能做,而且還是用reactive 做的
當ref 的參數為物件時,用的就是reactive 方法
在Vue3 中,如果是把物件類型的資料弄成響應式,reactive 和ref 都可以,且ref 內部是透過r eactive 來支援的。也就是說,你 reactive 能做的,我 ref 也能做。
簡單來說 ref 是在 reactive 上在進行了封裝進行了增強,所以在 Vue3 中 reactive 能做的,ref 也能做,reactive 不能做的,ref 也能做。
個人理解ref是reactive的語法糖,如:ref(1) 就等價於reactive({value: 1});
平時項目ref一把梭,是可以的,問題也不大
vue3 ref 和reactive的區別
Ref
ref資料響應式監聽。 ref 函數傳入一個值作為參數,一般傳入基本資料類型,返回一個基於該值的響應式Ref對象,該對像中的值一旦被改變和訪問,都會被跟踪到,就像我們改寫後的示例程式碼一樣,透過修改count.value 的值,可以觸發模板的重新渲染,顯示最新的值
<template> <h2 id="name">{{name}}</h2> <h2 id="age">{{age}}</h2> <button @click="sayName">按钮</button> </template> <script lang="ts"> import {ref,computed} from 'vue' export default { name: 'App', setup(){ const name = ref('zhangsan') const birthYear = ref(2000) const now = ref(2020) const age = computed(()=>{ return now.value - birthYear.value }) const sayName = () =>{ name.value = 'I am ' + name.value } return { name, sayName, age } } } </script>
reactive
reactive是用來定義更複雜的資料類型,但是定義後裡面的變數取出來就不在是響應式Ref物件資料了
所以需要用toRefs函數轉換成響應式資料物件
將上面用ref寫的程式碼轉換成reactive型的程式碼
<template> <!-- <img src="/static/imghwm/default1.png" data-src="./assets/logo.png" class="lazy" alt="Vue logo" > --> <div> <h2 id="nbsp-name-nbsp">{{ name }}</h2> <h2 id="nbsp-age-nbsp">{{ age }}</h2> <button @click="sayName">按钮</button> </div> </template> <script lang="ts"> import { computed, reactive,toRefs } from "vue"; interface DataProps { name: string; now: number; birthYear: number; age: number; sayName: () => void; } export default { name: "App", setup() { const data: DataProps = reactive({ name: "zhangsan", birthYear: 2000, now: 2020, sayName: () => { console.log(1111); console.log(data.name); data.name = "I am " + data.name; console.log(data.name); }, age: computed(() => { return data.now - data.birthYear; }), }); const refData = toRefs(data) refData.age return { ...refData, }; }, }; </script> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>
以上是Vue3中關於ref和reactive的問題怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Vue.js是由尤雨溪在2014年發布的漸進式JavaScript框架,用於構建用戶界面。它的核心優勢包括:1.響應式數據綁定,數據變化自動更新視圖;2.組件化開發,UI可拆分為獨立、可複用的組件。

Netflix使用React作為其前端框架。 1)React的組件化開發模式和強大生態系統是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優化了渲染效率和用戶交互管理。

Netflix在前端技術上的選擇主要集中在性能優化、可擴展性和用戶體驗三個方面。 1.性能優化:Netflix選擇React作為主要框架,並開發了SpeedCurve和Boomerang等工具來監控和優化用戶體驗。 2.可擴展性:他們採用微前端架構,將應用拆分為獨立模塊,提高開發效率和系統擴展性。 3.用戶體驗:Netflix使用Material-UI組件庫,通過A/B測試和用戶反饋不斷優化界面,確保一致性和美觀性。

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

Netflix在框架選擇上主要考慮性能、可擴展性、開發效率、生態系統、技術債務和維護成本。 1.性能與可擴展性:選擇Java和SpringBoot以高效處理海量數據和高並發請求。 2.開發效率與生態系統:使用React提升前端開發效率,利用其豐富的生態系統。 3.技術債務與維護成本:選擇Node.js構建微服務,降低維護成本和技術債務。

Netflix主要使用React作為前端框架,輔以Vue用於特定功能。 1)React的組件化和虛擬DOM提升了Netflix應用的性能和開發效率。 2)Vue在Netflix的內部工具和小型項目中應用,其靈活性和易用性是關鍵。

Vue.js是一種漸進式JavaScript框架,適用於構建複雜的用戶界面。 1)其核心概念包括響應式數據、組件化和虛擬DOM。 2)實際應用中,可以通過構建Todo應用和集成VueRouter來展示其功能。 3)調試時,建議使用VueDevtools和console.log。 4)性能優化可通過v-if/v-show、列表渲染優化和異步加載組件等實現。

Vue.js適合小型到中型項目,而React更適用於大型、複雜應用。 1.Vue.js的響應式系統通過依賴追踪自動更新DOM,易於管理數據變化。 2.React採用單向數據流,數據從父組件流向子組件,提供明確的數據流向和易於調試的結構。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6
視覺化網頁開發工具