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ù)據(jù)。無論如何改變這個 .value
的內(nèi)容,Vue 都能檢測到變化并進行更新。
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 將無法跟蹤新的引用,因為新的引用不會被自動轉(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ū)別和最佳實踐
ref
:
創(chuàng)建一個響應(yīng)式引用。使用 .value
來訪問和修改值。可以直接通過 .value
重新賦值新的數(shù)組或?qū)ο蟆?/p>
reactive
:
- 創(chuàng)建一個深度響應(yīng)的對象或數(shù)組。
- 直接修改對象或數(shù)組的屬性或元素。
- 不能直接重新賦值整個對象或數(shù)組,而需要修改其內(nèi)部的屬性或元素。
實際解決方案
使用 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ù)組并添加新項目 console.log(city1List); // 訪問數(shù)組內(nèi)容 }); });
總結(jié)
ref
適用于需要頻繁更改整個值的場景,因為它可以直接賦值新的數(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)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Vue3 + MybatisPlus實現(xiàn)批量刪除功能(詳細代碼)
這篇文章主要介紹了Vue3 + MybatisPlus實現(xiàn)批量刪除功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03vue框架和react框架的區(qū)別以及各自的應(yīng)用場景使用
這篇文章主要介紹了vue框架和react框架的區(qū)別以及各自的應(yīng)用場景使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10