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

深入理解Vue3組合式API的實現

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

組合式API的好處

1.更好的邏輯組織:

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

組合式API 通過將相關的邏輯組合在一起,使代碼更加緊湊和清晰,尤其實在復雜組件中,組織代碼的方式更加自然。

2.更好的邏輯復用:

在選項式API中,如果要復用邏輯,通常使用mixin,但mixin存在作用域不清晰、命名沖突等問題。

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

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

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

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

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

Vue3有哪些生命周期?

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

Vue2.X 和 Vue3.X對比

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)聽特定響應式數據的變化,并在數據變化時執(zhí)行回調函數。下面是一個使用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請求、更新其他狀態(tài)等
});
 
// 改變count值會觸發(fā)watch的回調
count.value++;
  • watch接受兩個參數, 第一個參數是要監(jiān)聽的響應式值或計算屬性(可以是ref、reactive對象的屬性或者是computed的結果),第二個參數是回調函數。
  • 回調函數會在監(jiān)聽的值發(fā)生變化時被調用,它會接收到新的值和舊的值作為參數。
  • 如果你要深度監(jiān)聽對象或數組的變化, 可以為watch添加第三個參數,配置對象,如{deep:true}

2.watchEffect

watchEffect則是立即執(zhí)行并且持續(xù)監(jiān)聽其內部依賴變化的函數。每當其依賴的響應式值發(fā)生變化時,它都會重新執(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}`);
  // 根據count和message的值執(zhí)行一些副作用操作
});
 
// 改變count或message值都會觸發(fā)watchEffect的再次執(zhí)行
count.value++;
message.value = 'Updated Message';

詳細講解:

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

watch和watchEffect的對比

watch

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

watchEffect

  • watchEffect自動收集依賴數據,依賴數據更新時重新執(zhí)行自身
  • 立即執(zhí)行,沒有惰性,頁面的首次加載就會執(zhí)行
  • 無法獲取到原值,只能得到變化后的值
  • 不用指明監(jiān)視哪個屬性,監(jiān)視的回調中用到哪個屬性就監(jiān)視哪個屬性

ref 與 reactive 的區(qū)別?

定義

reactive 和 ref 是 Vue 3 中的兩種響應式數據綁定方式,ref 適用于簡單的響應式數據,而 reactive 則適用于復雜對象或數組的響應式數據。

ref:用于聲明 基本類型 或者單個變量的響應式數據。

ref 的核心在于它包裝了一個值,當這個值變化時,依賴它的視圖會重新渲染。
注意:ref 返回的是一個對象,其中的值通過 .value 屬性訪問。

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

reactive:用于聲明 對象 或 數組 的響應式數據。

reactive 更適合處理復雜的數據結構(對象或數組)。它返回的是一個響應式對象,直接操作對象的屬性時,視圖會自動更新。

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

主要區(qū)別如下:

1. 數據類型不同:

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

reactive可以用于包裝JavaScript對象和數組等復雜類型的數據。

2. 使用方式不同:

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

3. 訪問方式不同:

對于通過ref函數創(chuàng)建的響應式數據,我們可以通過.value屬性來訪問其實際值;而對于通過reactive函數創(chuàng)建的響應式對象,我們可以直接訪問其屬性或調用其方法。

4. 設計理念不同:

ref主要是為了解決單一元素/數據的響應式問題,而reactive則是為了解決JavaScript對象和數組等復雜數據結構的響應式問題

<script setup>

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

主要特點

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

基本用法

<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ū)別

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

組件定義

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

生命周期鉤子

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

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

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

相關文章

  • 淺析Vue2/Vue3中響應式的原理

    淺析Vue2/Vue3中響應式的原理

    這篇文章主要是來和大家一起討論一下Vue2與Vue3中響應式的原理,文中的相關示例代碼簡潔易懂,對我們深入了解Vue有一定的幫助,需要的可以參考下
    2023-07-07
  • vue路由守衛(wèi)+登錄態(tài)管理實例分析

    vue路由守衛(wèi)+登錄態(tài)管理實例分析

    這篇文章主要介紹了vue路由守衛(wèi)+登錄態(tài)管理,結合實例形式分析了vue路由守衛(wèi)與登錄態(tài)管理相關操作步驟與實現技巧,需要的朋友可以參考下
    2019-05-05
  • Vue-router 中hash模式和history模式的區(qū)別

    Vue-router 中hash模式和history模式的區(qū)別

    這篇文章主要介紹了Vue-router 中hash模式和history模式的區(qū)別,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 基于Vue-cli快速搭建項目的完整步驟

    基于Vue-cli快速搭建項目的完整步驟

    這篇文章主要給大家介紹了關于如何基于Vue-cli快速搭建項目的完整步驟,文中通過示例代碼以及圖片將搭建的步驟一步步介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • 詳細聊聊Vue的混入和繼承

    詳細聊聊Vue的混入和繼承

    混入(mixin)是一種非常靈活的方式,用來分發(fā)Vue組件中可復用的功能,一個混入對象可以包含任意組件選項,下面這篇文章主要給大家介紹了關于Vue混入和繼承的相關資料,需要的朋友可以參考下
    2021-09-09
  • vue結合Echarts實現點擊高亮效果的示例

    vue結合Echarts實現點擊高亮效果的示例

    下面小編就為大家分享一篇vue結合Echarts實現點擊高亮效果的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 淺談el-table中使用虛擬列表對對表格進行優(yōu)化

    淺談el-table中使用虛擬列表對對表格進行優(yōu)化

    我們會經常使用表格,如果數據量大就直接可以分頁,如果多條可能會影響表格的卡頓,那么應該如何進行優(yōu)化,感興趣的可以了解一下
    2021-08-08
  • Vue+ElementUi實現點擊表格鏈接頁面跳轉和路由效果

    Vue+ElementUi實現點擊表格鏈接頁面跳轉和路由效果

    這篇文章主要介紹了Vue+ElementUi實現點擊表格中鏈接進行頁面跳轉和路由,本文結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Vue3中按需引入ECharts詳細步驟(一看就會)

    Vue3中按需引入ECharts詳細步驟(一看就會)

    新項目采用Vue3作為前端項目框架,避免不了要使用echarts,這篇文章主要給大家介紹了關于Vue3中按需引入ECharts的相關資料,需要的朋友可以參考下
    2023-09-09
  • Vue 簡單實現前端權限控制的示例

    Vue 簡單實現前端權限控制的示例

    這篇文章主要介紹了Vue 簡單實現前端權限控制的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12

最新評論