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