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

詳解Vue如何自定義hooks(組合式)函數(shù)

 更新時(shí)間:2023年03月13日 11:15:37   作者:itclanCoder  
這篇文章主要為大家詳細(xì)介紹了在Vue中如何實(shí)現(xiàn)自定義hooks(組合式)函數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

Vue當(dāng)中,一個(gè)非常重要的功能就是組件的復(fù)用,編寫Vue組件,更多的也是在拼裝組件,將頁(yè)面的各個(gè)功能進(jìn)行模塊化

便于維護(hù)和管理,而在項(xiàng)目里,有些頁(yè)面中的組件的邏輯功能是一樣的,如果沒有進(jìn)行功能邏輯的復(fù)用,那么每個(gè)頁(yè)面都需要重復(fù)的寫一遍

Vue當(dāng)中各個(gè)組件是保持獨(dú)立的,如果想要復(fù)用頁(yè)面當(dāng)中的某個(gè)組件的邏輯,也就是復(fù)用組件邏輯的代碼

那么可以抽離邏輯,放到一個(gè)公共的地方管理的,方便在其他地方調(diào)用,達(dá)到復(fù)用代碼和邏輯的目的

Vue2當(dāng)中可以使用mixin,但使用這個(gè)有很多缺點(diǎn),而在Vue3中引入了組合式函數(shù),也就是自定義hooks就很好的解決了之前的問題

自定義hooks

解釋: 本質(zhì)上是一個(gè)函數(shù),把setup函數(shù)中使用的composition API進(jìn)行了封裝,復(fù)用有狀態(tài)邏輯的函數(shù)

類似Vue2mixin

優(yōu)勢(shì): 自定義hooks,復(fù)用代碼,讓setup中的邏輯更加清除易懂

點(diǎn)擊屏幕記錄鼠標(biāo)位置

現(xiàn)在有一個(gè)需求:就是記錄用戶點(diǎn)擊瀏覽器的位置,顯示到瀏覽器上,在組件中使用組合式API實(shí)現(xiàn)點(diǎn)擊鼠標(biāo)跟蹤功能,示例代碼如下所示

新建一個(gè)clickPoint.vue

import { ref,onMounted,onUnmounted } from 'vue';

const x = ref(0);  // 坐標(biāo)x的值
const y = ref(0);  // 坐標(biāo)y的值

function update(event) {
    x.value = event.pageX;
    y.value = event.pageY;
}
onMounted(() => {
    /*
    window.addEventListener('click',(event) => {
        x.value = event.pageX;
        y.value = event.pageY;
    })*/
    window.addEventListener('click',update)
    // 對(duì)于后面的這個(gè)回調(diào)處理函數(shù),可以單獨(dú)的抽離出去

})

// 解綁函數(shù)副作用
onUnmounted(() => {
    window.removeEventlistener('click',update);
})

模板代碼

<template>鼠標(biāo)的位置是:{{x}},{{y}}</template>

現(xiàn)在,如果想要在多個(gè)組件中復(fù)用這個(gè)相同的功能邏輯,我們可以把這個(gè)邏輯以一個(gè)組合式函數(shù)的形式提取到外部文件當(dāng)中的 我們命名這個(gè)文件叫usePoint.js

import {ref,onMounted,onUnmounted} from 'vue';

// 按照習(xí)慣,約定俗成,組合式函數(shù)名以`use`開頭
export function usePoint() {
    // 被組合式函數(shù)封裝和管理的狀態(tài)
    const x = ref(0);
    const y = ref(y);

    function update(event) {
       x.value = event.pageX;
       y.value = event.pageY;
    }
    onMounted(() => {
      window.addEventListener('click',update)
    })
    // 解綁函數(shù)副作用
    onUnmounted(() => {
        window.removeEventlistener('click',update);
    })

    // 通過返回值暴露所有管理的狀態(tài)
    return {
        x,
        y
    }
}

那它在組件中使用的方式

<script setup>
    import { usePoint } from "./usePoint.js"

    const { x,y} = usePoint();
    // 如果希望以對(duì)象屬性的形式來使用組合式函數(shù)中返回的狀態(tài),可以將返回的對(duì)象用reactive()包裝一次,這樣其中的ref會(huì)被自動(dòng)解包
    const clickPoint = reactive(usePoint());
    // clickPoint.x鏈接到原來的x ref
    console.log(clickPoint.x,clickPoint.y);
</script>

然后在模板中

<template>
    鼠標(biāo)的坐標(biāo): {{x}},{{y}}
    或
    鼠標(biāo)的坐標(biāo): {{clickPoint.x}},{{clickPoint.y}}
</template>

核心邏輯完全一致,我們做的只是把它移到一個(gè)外部函數(shù)中去,并返回需要暴露的狀態(tài)。和在組件中一樣,你也可以在組合式函數(shù)中使用所有的組合式 API?,F(xiàn)在,usePoint() 的功能可以在任何組件中輕易復(fù)用了。

可以嵌套多個(gè)組合式函數(shù):一個(gè)組合式函數(shù)可以調(diào)用一個(gè)或多個(gè)其他的組合式函數(shù)。這使得我們可以像使用多個(gè)組件組合成整個(gè)應(yīng)用一樣,用多個(gè)較小且邏輯獨(dú)立的單元來組合形成復(fù)雜的邏輯。實(shí)際上,這也是將這一設(shè)計(jì)模式的 API 集合命名為組合式 API

hooks函數(shù)的命名

組合式函數(shù)約定用駝峰式命名,并以use作為開頭

與Mixin的對(duì)比

Vue2可能會(huì)對(duì) mixins 選項(xiàng)比較熟悉。它也讓我們能夠把組件邏輯提取到可復(fù)用的單元里。然而 mixins 有三個(gè)主要的短板:

[1]. 不清晰的數(shù)據(jù)來源:當(dāng)使用了多個(gè) mixin 時(shí),實(shí)例上的數(shù)據(jù)屬性來自哪個(gè)mixin 變得不清晰,這使追溯實(shí)現(xiàn)和理解組件行為變得困難。這也是我們推薦在組合式函數(shù)中使用 ref +解構(gòu)模式的理由:讓屬性的來源一目了然

[2]. 命名空間沖突:多個(gè)來自不同作者的 mixin 可能會(huì)注冊(cè)相同的屬性名,造成命名沖突。若使用組合式函數(shù),你可以通過在解構(gòu)變量時(shí)對(duì)變量進(jìn)行重命名來避免相同的鍵名

[3]. 隱式的跨 mixin交流:多個(gè) mixin 需要依賴共享的屬性名來進(jìn)行相互作用,這使得它們隱性地耦合在一起。而一個(gè)組合式函數(shù)的返回值可以作為另一個(gè)組合式函數(shù)的參數(shù)被傳入,像普通函數(shù)那樣

Vue 3中不推薦使用 mixin。有時(shí)需要查找一個(gè)變量,那么需要全局的搜索

與無渲染組件的對(duì)比

組合式函數(shù)相對(duì)于無渲染組件的主要優(yōu)勢(shì)是:組合式函數(shù)不會(huì)產(chǎn)生額外的組件實(shí)例開銷。當(dāng)在整個(gè)應(yīng)用中使用時(shí),由無渲染組件產(chǎn)生的額外組件實(shí)例會(huì)帶來無法忽視的性能開銷。

我們推薦在純邏輯復(fù)用時(shí)使用組合式函數(shù),在需要同時(shí)復(fù)用邏輯和視圖布局時(shí)使用無渲染組件

總結(jié)

組合式API函數(shù),抽取組合式函數(shù)不僅是為了復(fù)用,也是為了代碼組織,組合式 API 會(huì)給予更多的靈活性,讓你可以基于邏輯問題將組件代碼拆分成更小的函數(shù)

進(jìn)行管理,總之,vue3的自定義hooks函數(shù)對(duì)復(fù)用組件的邏輯代碼很實(shí)用

到此這篇關(guān)于詳解Vue如何自定義hooks(組合式)函數(shù)的文章就介紹到這了,更多相關(guān)Vue自定義hooks函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue封裝TabBar組件的完整步驟記錄

    vue封裝TabBar組件的完整步驟記錄

    組件封裝是為了復(fù)用,換成大白話就是,同樣的事情我不想做第二遍,節(jié)省出來的時(shí)間用來看動(dòng)漫不香嗎,下面這篇文章主要給大家介紹了關(guān)于vue封裝TabBar組件的完整步驟,需要的朋友可以參考下
    2021-10-10
  • vue 數(shù)據(jù)遍歷篩選 過濾 排序的應(yīng)用操作

    vue 數(shù)據(jù)遍歷篩選 過濾 排序的應(yīng)用操作

    這篇文章主要介紹了vue 數(shù)據(jù)遍歷篩選 過濾 排序的應(yīng)用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vue3+TypeScript報(bào)錯(cuò):無法找到模塊xx的聲明文件問題

    Vue3+TypeScript報(bào)錯(cuò):無法找到模塊xx的聲明文件問題

    這篇文章主要介紹了Vue3+TypeScript報(bào)錯(cuò):無法找到模塊xx的聲明文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 如何在vue3中使用jsx語法

    如何在vue3中使用jsx語法

    這篇文章主要介紹了在vue3中使用jsx語法,下面主要通過對(duì)比jsx和template不同語法,來實(shí)現(xiàn)同樣的功能,需要的朋友可以參考下
    2023-03-03
  • 詳解基于 axios 的 Vue 項(xiàng)目 http 請(qǐng)求優(yōu)化

    詳解基于 axios 的 Vue 項(xiàng)目 http 請(qǐng)求優(yōu)化

    這篇文章主要介紹了詳解基于 axios 的 Vue 項(xiàng)目 http 請(qǐng)求優(yōu)化,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • vue:內(nèi)存泄露詳解

    vue:內(nèi)存泄露詳解

    這篇文章主要介紹了一個(gè)Vue的內(nèi)存泄露詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-10-10
  • Vue實(shí)現(xiàn)用戶自定義字段顯示數(shù)據(jù)的方法

    Vue實(shí)現(xiàn)用戶自定義字段顯示數(shù)據(jù)的方法

    今天小編就為大家分享一篇Vue實(shí)現(xiàn)用戶自定義字段顯示數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Vue組件高級(jí)通訊之$attrs與$listeners

    Vue組件高級(jí)通訊之$attrs與$listeners

    這篇文章主要為大家介紹了Vue組件高級(jí)通訊之$attrs與$listeners使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 利用Vue.js框架實(shí)現(xiàn)火車票查詢系統(tǒng)(附源碼)

    利用Vue.js框架實(shí)現(xiàn)火車票查詢系統(tǒng)(附源碼)

    這篇文章主要介紹了利用Vue.js框架實(shí)現(xiàn)火車票查詢系統(tǒng)的相關(guān)資料,,文中給出了詳細(xì)的介紹與示例代碼,并在文章結(jié)尾給出了完整的項(xiàng)目下載,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Vue實(shí)現(xiàn)縱向的物流時(shí)間軸效果的示例代碼

    Vue實(shí)現(xiàn)縱向的物流時(shí)間軸效果的示例代碼

    在當(dāng)今數(shù)字化的時(shí)代,用戶體驗(yàn)的優(yōu)化至關(guān)重要,物流信息的展示作為電商和供應(yīng)鏈領(lǐng)域中的關(guān)鍵環(huán)節(jié),其呈現(xiàn)方式直接影響著用戶對(duì)貨物運(yùn)輸狀態(tài)的感知和滿意度,所以本文介紹了Vue實(shí)現(xiàn)縱向的物流時(shí)間軸效果的方法,需要的朋友可以參考下
    2024-08-08

最新評(píng)論