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

Vue?3.0?中?hooks?的概念示例詳解

 更新時(shí)間:2024年10月24日 12:12:00   作者:執(zhí)鍵行天涯  
在Vue3.0框架中,hooks函數(shù)允許將組件邏輯抽離復(fù)用,提高代碼的可維護(hù)性和復(fù)用性,通過封裝邏輯如獲取數(shù)據(jù)、處理狀態(tài)等,hooks使得組件開發(fā)更加高效和清晰,示例中,useDog.ts用于獲取狗狗圖片,展示了hooks封裝數(shù)據(jù)和邏輯、響應(yīng)式數(shù)據(jù)和異步操作的能力

背景:在一些情況下,前臺的組件是可以復(fù)用的,那這些復(fù)用的對象和數(shù)據(jù),為了避免直接寫在一個(gè)vue文件中的混亂性,我們可以為每一個(gè)類型的內(nèi)容,寫成一個(gè)hooks,以便后面重復(fù)利用

一、示例

App.vue

<template>
  <Person/>
</template>
<script lang="ts" setup name="App"> //當(dāng)前根組件的組件名
import Person from './components/Person.vue'
</script>
<style >
.app {
background-color: #ddd;
box-shadow: 0 0 10px;
border-radius: 10px;
padding: 20px;
}
</style>
**useSum.ts**
```html
import {ref,reactive, computed} from 'vue'
import axios from 'axios' 
export default function(){
let sum =ref(0);
let bigSum =computed(()=>{
    return sum.value*10;
})
function addSum(){
    sum.value+=1;
}
return {sum,addSum,bigSum}
}

useDog.ts

import {ref,reactive} from 'vue'
import axios from 'axios' 
 export default function(){
let dogList = reactive([
    'https://images.dog.ceo//breeds//pembroke//n02113023_11091.jpg'
]);
async function getDog(){
    try{
        let result = await axios.get('https://dog.ceo/api/breed/pembroke/images/random');
        dogList.push(result.data.message)
    }catch(error){
        alert(error);
    }
}
    return {dogList,getDog};
 }

Person.vue,在此vue中使用上面的兩個(gè)組件;

<template>
    <div class="person">
      <h2>求和:{{sum}}====bigSum:{{bigSum}}</h2>
      <button @click="addSum">和加一</button>
      <hr/>
      <img v-for="(dog,index) in dogList" :key="index" :src="dog"><br/>
      <button @click="getDog"> 點(diǎn)我換小狗</button>
    </div>
</template>
<script lang="ts" setup name="Person">
import useDog from '@/hooks/useDog';
import useSum from '@/hooks/useSum';
let {dogList,getDog} = useDog();
let {sum,addSum,bigSum} = useSum();
</script>
<style scoped>
.person {
    background-color: skyblue;
    box-shadow: 0 0 10px;
    border-radius: 10px;
    padding: 20px;
}
li {
    font: 1em sans-serif;
}
img {
    height: 100px;
    margin-right: 10px;
}
</style>

展示效果

在這個(gè)例子中,很好地展示了 Vue 3.0 中 hooks 的概念及使用方式。

二、Vue 3.0 中 hooks 的概念

Hooks 是一組以 use 開頭的函數(shù),用于在 Vue 3 的函數(shù)式組件(使用 setup 函數(shù)的組件)中封裝和復(fù)用有狀態(tài)的邏輯。它們可以讓開發(fā)者將組件中的邏輯提取出來,使得代碼更加清晰、可維護(hù)和可復(fù)用。

主要特點(diǎn)包括:

  • 邏輯封裝:可以將特定的業(yè)務(wù)邏輯封裝在一個(gè) hook 函數(shù)中,例如獲取數(shù)據(jù)、處理狀態(tài)等。
  • 可復(fù)用性:一個(gè) hook 可以在多個(gè)組件中復(fù)用,避免了重復(fù)代碼的編寫。
  • 清晰的代碼結(jié)構(gòu):通過將相關(guān)邏輯集中在 hook 函數(shù)中,組件的代碼更加簡潔明了,易于理解和維護(hù)。

在這里解釋一下 例子中 hooks 的使用

  • useDog.ts中的 hook:
    • 封裝數(shù)據(jù)和邏輯:在 useDog.ts 中,定義了一個(gè)函數(shù),這個(gè)函數(shù)實(shí)際上就是一個(gè) hook。它封裝了與獲取狗狗圖片相關(guān)的數(shù)據(jù)(dogList)和邏輯(getDog 函數(shù)用于獲取隨機(jī)狗狗圖片的 URL 并添加到 dogList 中)。
    • 響應(yīng)式數(shù)據(jù):使用 reactive 創(chuàng)建了響應(yīng)式的 dogList,這樣當(dāng) dogList 的內(nèi)容發(fā)生變化時(shí),使用這個(gè)數(shù)據(jù)的組件會自動更新視圖。
    • 異步操作getDog 函數(shù)中使用 axios 進(jìn)行異步請求獲取隨機(jī)狗狗圖片的 URL,成功后將其添加到 dogList 中,如果出現(xiàn)錯誤則彈出錯誤提示。
  • Person.vue 中的使用:
    • 引入 hook:通過 import useDog from '@/hooks/useDog'; 引入 useDog hook。
    • 解構(gòu)賦值:使用解構(gòu)賦值 let { dogList, getDog } = useDog(); 獲取 useDog hook 中返回的 dogListgetDog 函數(shù)。
    • 模板中使用:在模板中,使用 v-for 遍歷 dogList 來展示多個(gè)狗狗圖片,并且通過點(diǎn)擊按鈕觸發(fā) getDog 函數(shù)來獲取新的狗狗圖片,從而更新視圖。

綜上所述,這個(gè)例子展示了 Vue 3.0 中 hooks 的強(qiáng)大功能,通過封裝邏輯和數(shù)據(jù),提高了代碼的可維護(hù)性和可復(fù)用性,使得組件的開發(fā)更加高效和清晰。

到此這篇關(guān)于Vue 3.0 中 hooks 的概念的文章就介紹到這了,更多相關(guān)Vue 3.0 hooks內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue2.x響應(yīng)式簡單講解及示例

    Vue2.x響應(yīng)式簡單講解及示例

    這篇文章主要介紹了Vue2.x響應(yīng)式及簡單的示例,應(yīng)用了簡單的源代碼進(jìn)行講解,感興趣的小伙伴可以參考一下,希望可以幫助到你
    2021-08-08
  • vue計(jì)算屬性get和set用法示例

    vue計(jì)算屬性get和set用法示例

    這篇文章主要介紹了vue計(jì)算屬性get和set用法,結(jié)合實(shí)例形式分析了計(jì)算屬性的功能及get和set用法的具體使用技巧,需要的朋友可以參考下
    2019-02-02
  • 基于VUE實(shí)現(xiàn)判斷設(shè)備是PC還是移動端

    基于VUE實(shí)現(xiàn)判斷設(shè)備是PC還是移動端

    這篇文章主要介紹了基于VUE實(shí)現(xiàn)判斷設(shè)備是PC還是移動端,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • vue3中cookie的詳細(xì)使用過程

    vue3中cookie的詳細(xì)使用過程

    近期做的項(xiàng)目比較雜,涉及到前端框架的工作,遇到了許多問題,記錄一下這個(gè)比較棘手的問題,下面這篇文章主要給大家介紹了關(guān)于vue3中cookie的詳細(xì)使用方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 使用vue進(jìn)行Lodop打印的一些常用方法小結(jié)

    使用vue進(jìn)行Lodop打印的一些常用方法小結(jié)

    這篇文章主要給大家介紹了關(guān)于使用vue進(jìn)行Lodop打印的一些常用方法,需要進(jìn)行打印功能,Lodop就是實(shí)現(xiàn)需求的插件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • elementUI中el-table表頭和內(nèi)容全部一行顯示完整的方法

    elementUI中el-table表頭和內(nèi)容全部一行顯示完整的方法

    最近參與web開發(fā)時(shí),讓我解決一個(gè)elementui控制內(nèi)容單行顯示,下面這篇文章主要給大家介紹了關(guān)于elementUI中el-table表頭和內(nèi)容全部一行顯示完整的方法,需要的朋友可以參考下
    2023-06-06
  • el-select綁定值遇到的問題小結(jié)

    el-select綁定值遇到的問題小結(jié)

    碰到一個(gè)問題,選擇框的數(shù)據(jù)是后端傳過來的,下拉框的數(shù)據(jù)也是后端傳過來的,但是打開下拉框時(shí),發(fā)現(xiàn)數(shù)據(jù)沒有高亮,最后通過只要選擇框v-model給的值和option的value綁定的值一致,就可以高亮,感興趣的朋友一起看看吧
    2023-12-12
  • axios+Vue實(shí)現(xiàn)上傳文件顯示進(jìn)度功能

    axios+Vue實(shí)現(xiàn)上傳文件顯示進(jìn)度功能

    這篇文章主要介紹了axios+Vue上傳文件顯示進(jìn)度效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • vue+axios+promise實(shí)際開發(fā)用法詳解

    vue+axios+promise實(shí)際開發(fā)用法詳解

    這篇文章主要介紹了vue+axios+promise實(shí)際開發(fā)用法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • 深入聊一聊虛擬DOM與diff算法

    深入聊一聊虛擬DOM與diff算法

    為什么vue等的這些mvvm框架比傳統(tǒng)的操作dom渲染頁面要快,下面這篇文章主要給大家介紹了關(guān)于虛擬DOM與diff算法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評論

治多县| 梁平县| 丁青县| 鞍山市| 保靖县| 台北县| 彭山县| 奈曼旗| 海口市| 宣恩县| 苏尼特左旗| 东丽区| 姜堰市| 兴海县| 临潭县| 连山| 嵊泗县| 瑞丽市| 福安市| 团风县| 淮阳县| 信宜市| 城口县| 华宁县| 五华县| 鹰潭市| 敦化市| 兴城市| 高阳县| 东乡族自治县| 湖州市| 大港区| 安国市| 乌鲁木齐县| 景德镇市| 当雄县| 大新县| 南安市| 阿拉善右旗| 含山县| 山阴县|