Vue.js 中 ref 和 reactive 的區(qū)別及用法解析
Vue.js 中 ref
和 reactive
的區(qū)別及用法
ref
- 目的:創(chuàng)建一個對值的響應(yīng)式引用。
- 用法:通過
.value
屬性來訪問和修改值。 - 示例:
import { ref } from 'vue'; const count = ref(0); count.value++; // 增加值 console.log(count.value); // 訪問值
直接賦值數(shù)組:ref
創(chuàng)建的是一個包含 .value
屬性的對象,這個 .value
屬性持有實(shí)際的數(shù)據(jù)。無論如何改變這個 .value
的內(nèi)容,Vue 都能檢測到變化并進(jìn)行更新。
import { ref } from 'vue'; const city1List = ref([]); onMounted(() => { getCityByPid(0).then(res => { city1List.value = res.data.data; // 直接賦值新數(shù)組 console.log(city1List.value); // 訪問數(shù)組內(nèi)容 }); });
reactive
- 目的:創(chuàng)建一個深度響應(yīng)的對象或數(shù)組。
- 用法:直接修改響應(yīng)對象或數(shù)組的屬性。
- 示例:
import { reactive } from 'vue'; const state = reactive({ count: 0 }); state.count++; // 增加 count console.log(state.count); // 訪問 count
不能直接賦值數(shù)組:reactive
創(chuàng)建的是一個深度響應(yīng)的對象或數(shù)組,Vue 只跟蹤創(chuàng)建時的對象引用。如果直接重新賦值一個新的對象或數(shù)組,Vue 將無法跟蹤新的引用,因?yàn)樾碌囊貌粫蛔詣愚D(zhuǎn)換為響應(yīng)式對象。
import { reactive } from 'vue'; let city1List = reactive([]); onMounted(() => { getCityByPid(0).then(res => { city1List.splice(0, city1List.length, ...res.data.data); // 使用數(shù)組方法修改內(nèi)容 console.log(city1List); // 訪問數(shù)組內(nèi)容 }); );
關(guān)鍵區(qū)別和最佳實(shí)踐
ref
:
創(chuàng)建一個響應(yīng)式引用。使用 .value
來訪問和修改值??梢灾苯油ㄟ^ .value
重新賦值新的數(shù)組或?qū)ο蟆?/p>
reactive
:
- 創(chuàng)建一個深度響應(yīng)的對象或數(shù)組。
- 直接修改對象或數(shù)組的屬性或元素。
- 不能直接重新賦值整個對象或數(shù)組,而需要修改其內(nèi)部的屬性或元素。
實(shí)際解決方案
使用 reactive
更新數(shù)組時,可以使用 splice
清除并替換元素,這樣保持了對原始響應(yīng)數(shù)組的引用,Vue 會繼續(xù)跟蹤其內(nèi)容的變化。
import { reactive } from 'vue'; let city1List = reactive([]); onMounted(() => { getCityByPid(0).then(res => { city1List.splice(0, city1List.length, ...res.data.data); // 清除現(xiàn)有數(shù)組并添加新項(xiàng)目 console.log(city1List); // 訪問數(shù)組內(nèi)容 }); });
總結(jié)
ref
適用于需要頻繁更改整個值的場景,因?yàn)樗梢灾苯淤x值新的數(shù)組或?qū)ο蟆?/p>
reactive
適用于需要深度響應(yīng)的對象或數(shù)組,在修改其內(nèi)部屬性或元素時能保持響應(yīng)性。
到此這篇關(guān)于Vue.js 中 ref 和 reactive 的區(qū)別及用法的文章就介紹到這了,更多相關(guān)Vue.js ref 和 reactive用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何解決模塊““vue“”沒有導(dǎo)出的成員“ref”問題
這篇文章主要介紹了如何解決模塊““vue“”沒有導(dǎo)出的成員“ref”問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04vue動態(tài)設(shè)置路由權(quán)限的主要思路
這篇文章主要給大家介紹了關(guān)于vue動態(tài)設(shè)置路由權(quán)限的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Vue3 + MybatisPlus實(shí)現(xiàn)批量刪除功能(詳細(xì)代碼)
這篇文章主要介紹了Vue3 + MybatisPlus實(shí)現(xiàn)批量刪除功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03VUE項(xiàng)目中加載已保存的筆記實(shí)例方法
在本篇文章里小編給大家整理了一篇關(guān)于VUE項(xiàng)目中加載已保存的筆記實(shí)例方法,有興趣的讀者們可以參考下。2019-09-09如何在Vue中實(shí)現(xiàn)登錄驗(yàn)證功能(代碼示例)
Vue是一種流行的JavaScript框架,可以幫助開發(fā)者建立高效的Web應(yīng)用程序,本文將為您介紹如何在Vue中實(shí)現(xiàn)登錄驗(yàn)證功能,并為您提供具體的代碼示例,感興趣的朋友一起看看吧2023-11-11vue框架和react框架的區(qū)別以及各自的應(yīng)用場景使用
這篇文章主要介紹了vue框架和react框架的區(qū)別以及各自的應(yīng)用場景使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10