最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Vue3組合式API的實(shí)現(xiàn)

 更新時(shí)間:2024年10月08日 08:30:48   作者:Fanfffff720  
組合式API為Vue3帶來(lái)了更好的邏輯組織和復(fù)用性,支持TypeScript,提供靈活的響應(yīng)式系統(tǒng),它允許開發(fā)者將相關(guān)邏輯組合在一起,通過(guò)composable函數(shù)實(shí)現(xiàn)邏輯復(fù)用,擺脫了mixin的缺點(diǎn),同時(shí),組合式API與TypeScript的集成更緊密,能夠提供更準(zhǔn)確的類型推斷

組合式API的好處

1.更好的邏輯組織:

在選項(xiàng)式API中,組件邏輯是按照data、methods、computed、watch等分塊寫的,這種分離可能會(huì)導(dǎo)致相同功能的代碼分散在不同的部分。

組合式API 通過(guò)將相關(guān)的邏輯組合在一起,使代碼更加緊湊和清晰,尤其實(shí)在復(fù)雜組件中,組織代碼的方式更加自然。

2.更好的邏輯復(fù)用:

在選項(xiàng)式API中,如果要復(fù)用邏輯,通常使用mixin,但mixin存在作用域不清晰、命名沖突等問(wèn)題。

組合式API提供了composable (可組合函數(shù))的概念,運(yùn)行將邏輯抽取成獨(dú)立的函數(shù),這樣復(fù)用性更強(qiáng)、代碼更清晰。

3.更好的類型推斷支持:

組合式API更好地支持TypeScript,尤其是在函數(shù)內(nèi)部可以更明確地推斷出數(shù)據(jù)和函數(shù)的類型,而不需要額外的類型定義。

4.更靈活的響應(yīng)式系統(tǒng):

組合式API 提供了更靈活的響應(yīng)式系統(tǒng),比如通過(guò)ref和reactive可以更直觀地控制響應(yīng)式數(shù)據(jù)的行為

Vue3有哪些生命周期?

  • setup():開始創(chuàng)建組件,在beforeCreate  和  created 之前進(jìn)行, 創(chuàng)建的是 data 和 method
  • onBeforeMount():組件掛載到節(jié)點(diǎn)上之前執(zhí)行的函數(shù)
  • onMounted():組件掛在完成后執(zhí)行的函數(shù);
  • onBeforeUpdate():組件更新之前執(zhí)行的函數(shù);
  • onUpdated():組件更新完成之后執(zhí)行的函數(shù);
  • onBeforeUnmount():組件卸載之前執(zhí)行的函數(shù);
  • onUnmounted():組件卸載完成后執(zhí)行的函數(shù);
  • onActived():被包含在<keep-alive>中的組件, 會(huì)多出兩個(gè)生命周期鉤子函數(shù),被激活時(shí)執(zhí)行;
  • onDeactivated():比如 A 組件切換到 B 組件,A組件消失時(shí)執(zhí)行;
  • onErrorCaptured():當(dāng)捕獲一個(gè)來(lái)自子孫組件的異常時(shí)激活鉤子函數(shù)。

Vue2.X 和 Vue3.X對(duì)比

vue2           ------->      vue3
 
beforeCreate   -------->      setup(()=>{})
created        -------->      setup(()=>{})
beforeMount    -------->      onBeforeMount(()=>{})
mounted        -------->      onMounted(()=>{})
beforeUpdate   -------->      onBeforeUpdate(()=>{})
updated        -------->      onUpdated(()=>{})
beforeDestroy  -------->      onBeforeUnmount(()=>{})
destroyed      -------->      onUnmounted(()=>{})
activated      -------->      onActivated(()=>{})
deactivated    -------->      onDeactivated(()=>{})
errorCaptured  -------->      onErrorCaptured(()=>{})

watch 和 watchEffect 的區(qū)別?

1.watch

watch用于監(jiān)聽(tīng)特定響應(yīng)式數(shù)據(jù)的變化,并在數(shù)據(jù)變化時(shí)執(zhí)行回調(diào)函數(shù)。下面是一個(gè)使用watch的例子:

import { ref, watch } from 'vue';
 
const count = ref(0);
 
watch(count, (newValue, oldValue) => {
  console.log(`Count changed from ${oldValue} to ${newValue}`);
  // 執(zhí)行一些副作用操作,例如發(fā)送API請(qǐng)求、更新其他狀態(tài)等
});
 
// 改變count值會(huì)觸發(fā)watch的回調(diào)
count.value++;
  • watch接受兩個(gè)參數(shù), 第一個(gè)參數(shù)是要監(jiān)聽(tīng)的響應(yīng)式值或計(jì)算屬性(可以是ref、reactive對(duì)象的屬性或者是computed的結(jié)果),第二個(gè)參數(shù)是回調(diào)函數(shù)。
  • 回調(diào)函數(shù)會(huì)在監(jiān)聽(tīng)的值發(fā)生變化時(shí)被調(diào)用,它會(huì)接收到新的值和舊的值作為參數(shù)。
  • 如果你要深度監(jiān)聽(tīng)對(duì)象或數(shù)組的變化, 可以為watch添加第三個(gè)參數(shù),配置對(duì)象,如{deep:true}

2.watchEffect

watchEffect則是立即執(zhí)行并且持續(xù)監(jiān)聽(tīng)其內(nèi)部依賴變化的函數(shù)。每當(dāng)其依賴的響應(yīng)式值發(fā)生變化時(shí),它都會(huì)重新執(zhí)行。

import { ref, watchEffect } from 'vue';
 
const count = ref(0);
const message = ref('Initial Message');
 
watchEffect(() => {
  console.log(`Count is ${count.value}, and message is ${message.value}`);
  // 根據(jù)count和message的值執(zhí)行一些副作用操作
});
 
// 改變count或message值都會(huì)觸發(fā)watchEffect的再次執(zhí)行
count.value++;
message.value = 'Updated Message';

詳細(xì)講解:

  • watchEffect不需要指定監(jiān)聽(tīng)的具體值,它會(huì)自動(dòng)追蹤其內(nèi)部表達(dá)式所涉及的所有響應(yīng)式依賴。
  • 當(dāng)調(diào)用watchEffect時(shí),它會(huì)立即執(zhí)行一次,并記錄下內(nèi)部依賴的快照,此后每當(dāng)依賴項(xiàng)變化時(shí),它會(huì)再次執(zhí)行。
  • 若想停止監(jiān)聽(tīng),可以返回一個(gè)清理函數(shù),例如在組件卸載時(shí)清理副作用。

watch和watchEffect的對(duì)比

watch

  • watch顯式指定依賴數(shù)據(jù),依賴數(shù)據(jù)更新時(shí)執(zhí)行回調(diào)函數(shù)
  • 具有一定的惰性lazy 第一次頁(yè)面展示的時(shí)候不會(huì)執(zhí)行,只有數(shù)據(jù)變化的時(shí)候才會(huì)執(zhí)行(設(shè)置immediate: true時(shí)可以變?yōu)榉嵌栊裕?yè)面首次加載就會(huì)執(zhí)行)
  • 監(jiān)視r(shí)ef定義的響應(yīng)式數(shù)據(jù)時(shí)可以獲取到原值
  • 既要指明監(jiān)視的屬性,也要指明監(jiān)視的回調(diào)

watchEffect

  • watchEffect自動(dòng)收集依賴數(shù)據(jù),依賴數(shù)據(jù)更新時(shí)重新執(zhí)行自身
  • 立即執(zhí)行,沒(méi)有惰性,頁(yè)面的首次加載就會(huì)執(zhí)行
  • 無(wú)法獲取到原值,只能得到變化后的值
  • 不用指明監(jiān)視哪個(gè)屬性,監(jiān)視的回調(diào)中用到哪個(gè)屬性就監(jiān)視哪個(gè)屬性

ref 與 reactive 的區(qū)別?

定義

reactive 和 ref 是 Vue 3 中的兩種響應(yīng)式數(shù)據(jù)綁定方式,ref 適用于簡(jiǎn)單的響應(yīng)式數(shù)據(jù),而 reactive 則適用于復(fù)雜對(duì)象或數(shù)組的響應(yīng)式數(shù)據(jù)。

ref:用于聲明 基本類型 或者單個(gè)變量的響應(yīng)式數(shù)據(jù)。

ref 的核心在于它包裝了一個(gè)值,當(dāng)這個(gè)值變化時(shí),依賴它的視圖會(huì)重新渲染。
注意:ref 返回的是一個(gè)對(duì)象,其中的值通過(guò) .value 屬性訪問(wèn)。

const count = ref(0);
console.log(count.value); // 0
count.value++;

reactive:用于聲明 對(duì)象 或 數(shù)組 的響應(yīng)式數(shù)據(jù)。

reactive 更適合處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(對(duì)象或數(shù)組)。它返回的是一個(gè)響應(yīng)式對(duì)象,直接操作對(duì)象的屬性時(shí),視圖會(huì)自動(dòng)更新。

const state = reactive({
  name: 'Vue',
  age: 3
});
console.log(state.name); // 'Vue'
state.age = 4; // 視圖會(huì)自動(dòng)更新

主要區(qū)別如下:

1. 數(shù)據(jù)類型不同:

ref用于包裝JavaScript基本類型的數(shù)據(jù)(如字符串、數(shù)字、布爾值等),

reactive可以用于包裝JavaScript對(duì)象和數(shù)組等復(fù)雜類型的數(shù)據(jù)。

2. 使用方式不同:

ref需要通過(guò)在模板中使用ref指令以及在JavaScript代碼中使用ref函數(shù)進(jìn)行創(chuàng)建和使用,而reactive則需要通過(guò)調(diào)用Vue.js提供的reactive函數(shù)進(jìn)行包裝和創(chuàng)建。

3. 訪問(wèn)方式不同:

對(duì)于通過(guò)ref函數(shù)創(chuàng)建的響應(yīng)式數(shù)據(jù),我們可以通過(guò).value屬性來(lái)訪問(wèn)其實(shí)際值;而對(duì)于通過(guò)reactive函數(shù)創(chuàng)建的響應(yīng)式對(duì)象,我們可以直接訪問(wèn)其屬性或調(diào)用其方法。

4. 設(shè)計(jì)理念不同:

ref主要是為了解決單一元素/數(shù)據(jù)的響應(yīng)式問(wèn)題,而reactive則是為了解決JavaScript對(duì)象和數(shù)組等復(fù)雜數(shù)據(jù)結(jié)構(gòu)的響應(yīng)式問(wèn)題

<script setup>

<script setup> 是 Vue 3 引入的一種新語(yǔ)法糖,它用于使用組合式 API 編寫組件。這種語(yǔ)法簡(jiǎn)化了 Composition API 的使用,使得編寫和組織組件邏輯更加簡(jiǎn)潔和直觀。

主要特點(diǎn)

  • 聲明式<script setup> 提供了一種聲明式的方式來(lái)使用組合式 API,減少了樣板代碼。
  • 自動(dòng)響應(yīng):在 <script setup> 中定義的響應(yīng)式引用(如 ref 和 reactive)和函數(shù)自動(dòng)暴露給模板,無(wú)需返回對(duì)象。
  • 生命周期鉤子:生命周期鉤子(如 onMounted、onUpdated 等)可以直接導(dǎo)入和使用,無(wú)需定義匿名函數(shù)。
  • 模塊作用域:在 <script setup> 中導(dǎo)入的變量和函數(shù)自動(dòng)擁有模塊作用域,減少了全局命名沖突。

基本用法

<script setup>
import { ref, computed, onMounted } from 'vue';

const count = ref(0);
const doubledCount = computed(() => count.value * 2);

onMounted(() => {
  console.log('Component is mounted');
});

function increment() {
  count.value++;
}
</script>

<template>
  <div>
    <p>Count: {{ count }}</p>
    <p>Doubled Count: {{ doubledCount }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

與 <script> 的區(qū)別

  • 無(wú)需返回對(duì)象:在 <script setup> 中,你不需要返回一個(gè)對(duì)象來(lái)暴露響應(yīng)式狀態(tài)、計(jì)算屬性和方法給模板。
  • 更少的代碼<script setup> 使得組件的編寫更加簡(jiǎn)潔,減少了樣板代碼。

組件定義

在 <script setup> 中,你可以定義組件的響應(yīng)式狀態(tài)、計(jì)算屬性、方法和生命周期鉤子,就像在 <script> 標(biāo)簽中使用組合式 API 一樣,但是更加簡(jiǎn)潔。

生命周期鉤子

<script setup>
import { onMounted } from 'vue';

onMounted(() => {
  console.log('Component is mounted');
});
</script>

到此這篇關(guān)于深入理解Vue3組合式API的文章就介紹到這了,更多相關(guān)Vue3組合式API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue.js添加組件操作示例

    Vue.js添加組件操作示例

    這篇文章主要介紹了Vue.js添加組件操作,結(jié)合實(shí)例形式分析了vue.js組件的注冊(cè)、調(diào)用相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • vue項(xiàng)目添加多頁(yè)面配置的步驟詳解

    vue項(xiàng)目添加多頁(yè)面配置的步驟詳解

    公司使用 vue-cli 創(chuàng)建的 vue項(xiàng)目 在初始化時(shí)并沒(méi)有做多頁(yè)面配置,隨著需求的不斷增加,發(fā)現(xiàn)有必要使用多頁(yè)面配置。這篇文章主要介紹了vue項(xiàng)目添加多頁(yè)面配置,需要的朋友可以參考下
    2019-05-05
  • Vue-Typed-JS打字動(dòng)畫效果實(shí)現(xiàn)全過(guò)程

    Vue-Typed-JS打字動(dòng)畫效果實(shí)現(xiàn)全過(guò)程

    Vue-typed-js是一個(gè)用于Vue.js的Typed.js集成插件,它可以創(chuàng)建打字動(dòng)畫效果,這篇文章主要介紹了Vue-Typed-JS打字動(dòng)畫效果實(shí)現(xiàn)的相關(guān)資料,文中將插件的安裝及使用介紹的非常詳細(xì),需要的朋友可以參考下
    2025-08-08
  • vue踩坑記錄:屬性報(bào)undefined錯(cuò)誤問(wèn)題

    vue踩坑記錄:屬性報(bào)undefined錯(cuò)誤問(wèn)題

    這篇文章主要介紹了vue踩坑記錄:屬性報(bào)undefined錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue+webpack+Element 兼容問(wèn)題總結(jié)(小結(jié))

    Vue+webpack+Element 兼容問(wèn)題總結(jié)(小結(jié))

    這篇文章主要介紹了Vue+webpack+Element 兼容問(wèn)題總結(jié)(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Vue實(shí)現(xiàn)生成本地Json文件功能方式

    Vue實(shí)現(xiàn)生成本地Json文件功能方式

    這篇文章主要介紹了Vue實(shí)現(xiàn)生成本地Json文件功能方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 關(guān)于VUE的編譯作用域及slot作用域插槽問(wèn)題

    關(guān)于VUE的編譯作用域及slot作用域插槽問(wèn)題

    這篇文章主要介紹了VUE 的編譯作用域及slot作用域插槽問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Vue3非遞歸渲染Tree組件的初步實(shí)現(xiàn)代碼

    Vue3非遞歸渲染Tree組件的初步實(shí)現(xiàn)代碼

    這篇文章主要介紹了Vue3非遞歸渲染Tree組件的初步實(shí)現(xiàn),文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定幫助,需要的朋友可以參考下
    2024-05-05
  • vue組件中使用props傳遞數(shù)據(jù)的實(shí)例詳解

    vue組件中使用props傳遞數(shù)據(jù)的實(shí)例詳解

    這篇文章主要介紹了vue組件中使用props傳遞數(shù)據(jù)的實(shí)例詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-04-04
  • Vue進(jìn)行數(shù)據(jù)可視化圖表展示的實(shí)現(xiàn)示例

    Vue進(jìn)行數(shù)據(jù)可視化圖表展示的實(shí)現(xiàn)示例

    數(shù)據(jù)可視化是現(xiàn)代化的數(shù)據(jù)分析和展示方式,可以使數(shù)據(jù)更加直觀、易于理解和傳達(dá),Vue作為一款流行的前端框架,提供了豐富的插件和工具來(lái)實(shí)現(xiàn)數(shù)據(jù)可視化圖表展示,本文將介紹如何使用Vue和Echarts/D3.js來(lái)實(shí)現(xiàn)數(shù)據(jù)可視化圖表展示,并提供示例代碼和實(shí)際應(yīng)用場(chǎng)景
    2023-10-10

最新評(píng)論

富阳市| 海城市| 罗甸县| 于田县| 许昌市| 灵山县| 南召县| 科技| 德化县| 慈溪市| 建水县| 纳雍县| 兴业县| 怀远县| 右玉县| 满城县| 石嘴山市| 德令哈市| 颍上县| 灵寿县| 湛江市| 江源县| 吉首市| 青海省| 五大连池市| 武安市| 平原县| 三原县| 新平| 湘西| 和平区| 永顺县| 湘乡市| 德令哈市| 仪陇县| 湄潭县| 井陉县| 安仁县| 河源市| 新竹县| 房产|