欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3獲取響應(yīng)式數(shù)據(jù)的四種方法

 更新時(shí)間:2024年08月15日 10:09:38   作者:清靈xmf  
Vue 3 引入了一個(gè)全新的響應(yīng)式系統(tǒng),其中最核心的就是 reactive 和 ref,它們是實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)的基礎(chǔ),用于創(chuàng)建可以自動(dòng)跟蹤變化并更新視圖的對(duì)象和變量,本文介紹了Vue3獲取響應(yīng)式數(shù)據(jù)的四種方法,需要的朋友可以參考下

1. reactive:響應(yīng)式對(duì)象

1、概念

reactive 是用于創(chuàng)建響應(yīng)式對(duì)象的 API。它接收一個(gè)普通對(duì)象并返回一個(gè)代理對(duì)象。

這個(gè)代理對(duì)象是深度響應(yīng)的,也就是說(shuō),該對(duì)象及其所有嵌套對(duì)象都會(huì)成為響應(yīng)式的。并且可以感知到對(duì)它的所有操作(如屬性的讀寫(xiě)、刪除等),并在數(shù)據(jù)變化時(shí)自動(dòng)觸發(fā)視圖更新。 

2、用法

import { reactive } from 'vue'
const reactiveObj = reactive({
  count: 1,
  flower: {
    name: 'rose'
  }
})
window.reactiveObj = reactiveObj;

可以在控制臺(tái)輸出 reactiveObj 查看,也可以修改它的數(shù)據(jù)。 

3、特性

1)深度響應(yīng)式:reactive 會(huì)遞歸地將對(duì)象及其所有嵌套對(duì)象轉(zhuǎn)化為響應(yīng)式對(duì)象。

2)Proxy 機(jī)制:reactive 基于 Proxy 實(shí)現(xiàn),比 Vue 2 中的 Object.defineProperty 更加靈活和高效。

3)自動(dòng)依賴追蹤:當(dāng)響應(yīng)式對(duì)象的屬性在模板或計(jì)算屬性中被引用時(shí),Vue 會(huì)自動(dòng)追蹤這些依賴,并在數(shù)據(jù)變化時(shí)更新相關(guān)的視圖。

4、注意

淺拷貝問(wèn)題:reactive 創(chuàng)建的對(duì)象是一個(gè)代理對(duì)象,如果直接替換該對(duì)象(如 reactiveObj = {}),將無(wú)法保持響應(yīng)式效果。因此,建議修改對(duì)象的屬性,而不是替換整個(gè)對(duì)象來(lái)保持響應(yīng)式。

<template>
  <div>
    <p>reactiveObj.count: {{ reactiveObj.count }}</p>
  </div>
</template>
 
<script setup>
import { reactive } from 'vue';
const reactiveObj = reactive({
  count: 1
})
window.reactiveObj = reactiveObj;
</script>

2. ref:響應(yīng)式引用

1、概念

ref 是另一種創(chuàng)建響應(yīng)式數(shù)據(jù)的方法,特別適用于基本類型的值(如字符串、數(shù)字、布爾值等),或需要獨(dú)立的響應(yīng)式引用。

ref 會(huì)返回一個(gè)包含 .value 屬性的對(duì)象,這個(gè)屬性持有實(shí)際值,并且是響應(yīng)式的。

2、用法

import { ref, reactive } from "vue";
// value 是普通類型數(shù)據(jù)時(shí)
const numberRef = ref(0);
window.numberRef = numberRef;
const stringRef = ref("hello");
window.stringRef = stringRef;
 
// value 是一個(gè)對(duì)象時(shí)
const objectRef = ref({ a: 1, b: 2 });
window.objectRef = objectRef;
 
// value 是一個(gè)代理對(duì)象
const reactiveObj = reactive({ a: 11, b: 22 });
const reactiveRef = ref(reactiveObj);
window.reactiveObj = reactiveObj;
window.reactiveRef = reactiveRef;

3、特性

1)單值響應(yīng)式:ref 非常適合處理基本數(shù)據(jù)類型的響應(yīng)式數(shù)據(jù),或者是希望一個(gè)對(duì)象保持獨(dú)立響應(yīng)時(shí)。

2)模板自動(dòng)解包:在模板中使用 ref 時(shí),Vue 會(huì)自動(dòng)解包 .value,不需要顯式使用 .value。

<template>
  <div>{{ numberRef }}</div> <!-- Vue 自動(dòng)解包為 numberRef.value -->
</template>

3)組合式 API 的靈活性:ref 在組合式 API 中非常靈活,適合管理組件內(nèi)部的狀態(tài)和獨(dú)立的響應(yīng)式變量。 

4、總結(jié)

1)傳入一個(gè)普通數(shù)據(jù)時(shí),返回一個(gè)對(duì)象,對(duì)象屬性 value 是響應(yīng)式數(shù)據(jù)。

2)傳入一個(gè)對(duì)象時(shí),會(huì)調(diào)用一下 reactive,將該對(duì)象變成一個(gè)代理 proxy,目的是為了讓對(duì)象里面的所有屬性全部變成響應(yīng)式數(shù)據(jù)。

3)傳入一個(gè)代理對(duì)象時(shí),返回代理對(duì)象本身。

3. readonly:只讀響應(yīng)式對(duì)象

1、概念

readonly 是 Vue 3 提供的用于創(chuàng)建只讀響應(yīng)式對(duì)象的 API。它接收一個(gè)響應(yīng)式對(duì)象或普通對(duì)象,并返回一個(gè)只讀代理對(duì)象。

這個(gè)對(duì)象的所有屬性都變?yōu)橹蛔x,任何嘗試修改它的操作都會(huì)在開(kāi)發(fā)環(huán)境下觸發(fā)警告。

2、用法

readonly 通常用于保護(hù)一些不應(yīng)被直接修改的數(shù)據(jù),例如共享狀態(tài)或常量數(shù)據(jù)。

import { reactive, readonly } from "vue";
const reactiveObj = reactive({ a: 1, b: 2 });
const readonlyObj1 = readonly({ a: 11, b: 22 });
const readonlyObj2 = readonly(reactiveObj);
 
window.reactiveObj = reactiveObj;
window.readonlyObj1 = readonlyObj1;
window.readonlyObj2 = readonlyObj2;

4. computed:計(jì)算屬性 

1、概念 

computed 是 Vue 3 提供的用于創(chuàng)建計(jì)算屬性的 API。計(jì)算屬性基于響應(yīng)式數(shù)據(jù)或其他計(jì)算屬性,它們的值是通過(guò)一個(gè)函數(shù)計(jì)算出來(lái)的,并且只有當(dāng)其依賴的響應(yīng)式數(shù)據(jù)發(fā)生變化時(shí),計(jì)算屬性才會(huì)重新計(jì)算。這使得計(jì)算屬性在性能代碼簡(jiǎn)潔性上具有很大優(yōu)勢(shì)。

2、用法
computed 接收一個(gè)函數(shù),這個(gè)函數(shù)返回的值會(huì)被 Vue 緩存,直到依賴的響應(yīng)式數(shù)據(jù)發(fā)生變化時(shí),才會(huì)重新計(jì)算。

import { computed, reactive } from "vue";
const reactiveObj = reactive({ a: 1, b: 2 });
const sumRef = computed(() => {
  console.log("computed函數(shù)執(zhí)行");
  return reactiveObj.a + reactiveObj.b;
});
console.log(sumRef);
console.log(sumRef.value);
console.log(sumRef.value);
console.log(sumRef.value);
reactiveObj.a = 3;
reactiveObj.b = 4;
console.log(sumRef.value);
console.log(sumRef.value);

3、特性

1)緩存機(jī)制:computed 的值是惰性計(jì)算的,并且會(huì)被緩存,直到依賴項(xiàng)變化。這與方法不同,方法在每次調(diào)用時(shí)都會(huì)執(zhí)行,而計(jì)算屬性只有在依賴變化時(shí)才會(huì)重新計(jì)算。

2)只讀默認(rèn)性:計(jì)算屬性默認(rèn)是只讀的,但也可以通過(guò)傳遞一個(gè)帶有 get 和 set 的對(duì)象,使其成為可寫(xiě)的計(jì)算屬性。

import { ref, computed } from 'vue'
const count = ref(1);
const double = computed({
  get: () => count.value * 2,
  set: (value) => {
    count.value = value / 2
  }
})
double.value = 10;
console.log(count.value) // 5
count.value = 20;
console.log(double.value); // 40

4、注意

1)避免副作用:computed 應(yīng)該始終是純函數(shù),不應(yīng)包含會(huì)產(chǎn)生副作用的代碼(例如,網(wǎng)絡(luò)請(qǐng)求、DOM 操作等),這部分邏輯應(yīng)放在 watch 或方法中處理。
2)適度使用:雖然計(jì)算屬性很強(qiáng)大,但在一些場(chǎng)景下,使用方法或 watch 可能會(huì)更加合適。

以上就是Vue3獲取響應(yīng)式數(shù)據(jù)的四種方法的詳細(xì)內(nèi)容,更多關(guān)于Vue3獲取響應(yīng)式數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue3使用hook封裝媒體查詢和事件監(jiān)聽(tīng)的代碼示例

    Vue3使用hook封裝媒體查詢和事件監(jiān)聽(tīng)的代碼示例

    這篇文章主要給大家詳細(xì)介紹Vue3如何使用hook封裝媒體查詢和事件監(jiān)聽(tīng),使得Vue的開(kāi)發(fā)更加絲滑,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),感興趣的同學(xué)跟著小編一起來(lái)學(xué)習(xí)吧
    2023-07-07
  • vue中的data為什么是個(gè)函數(shù)而不是對(duì)象詳解

    vue中的data為什么是個(gè)函數(shù)而不是對(duì)象詳解

    這篇文章主要介紹了vue中的data為什么是個(gè)函數(shù)而不是對(duì)象問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • vue.js中修飾符.stop的用法解析

    vue.js中修飾符.stop的用法解析

    這篇文章主要介紹了vue.js中修飾符.stop的用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Vue.Draggable拖拽功能的配置使用方法

    Vue.Draggable拖拽功能的配置使用方法

    這篇文章主要為大家詳細(xì)介紹了Vue.Draggable拖拽功能配置使用的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • vue父子組件相互通信方法示例梳理總結(jié)

    vue父子組件相互通信方法示例梳理總結(jié)

    這篇文章主要為大家介紹了vue父子組件相互通信方式示例梳理總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 使用vue-cli3新建一個(gè)項(xiàng)目并寫(xiě)好基本配置(推薦)

    使用vue-cli3新建一個(gè)項(xiàng)目并寫(xiě)好基本配置(推薦)

    這篇文章主要介紹了使用vue-cli3新建一個(gè)項(xiàng)目并寫(xiě)好基本配置的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-04-04
  • vue中的computed?和?vm.$data?原理解析

    vue中的computed?和?vm.$data?原理解析

    這篇文章主要介紹了vue中的computed?和?vm.$data?原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 在nuxt中使用路由重定向的實(shí)例

    在nuxt中使用路由重定向的實(shí)例

    這篇文章主要介紹了在nuxt中使用路由重定向的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Vue中splice()方法對(duì)數(shù)組進(jìn)行增刪改等操作的實(shí)現(xiàn)

    Vue中splice()方法對(duì)數(shù)組進(jìn)行增刪改等操作的實(shí)現(xiàn)

    vue中對(duì)數(shù)組的元素進(jìn)行刪除,以前一直以為這個(gè)方法是vue中特有的,后來(lái)百度之后才知道原來(lái)是js的一個(gè)寫(xiě)法,下面這篇文章主要給大家介紹了關(guān)于Vue中splice()方法對(duì)數(shù)組進(jìn)行增刪改等操作的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2023-05-05
  • 詳解Vue.js在頁(yè)面加載時(shí)執(zhí)行某個(gè)方法

    詳解Vue.js在頁(yè)面加載時(shí)執(zhí)行某個(gè)方法

    這篇文章主要介紹了詳解Vue.js在頁(yè)面加載時(shí)執(zhí)行某個(gè)方法的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11

最新評(píng)論