Vue 3.0 中 hooks 的概念示例详解

 更新时间:2024年10月24日 12:12:00   作者:执键行天涯  
在Vue3.0框架中,hooks函数允许将组件逻辑抽离复用,提高代码的可维护性和复用性,通过封装逻辑如获取数据、处理状态等,hooks使得组件开发更加高效和清晰,示例中,useDog.ts用于获取狗狗图片,展示了hooks封装数据和逻辑、响应式数据和异步操作的能力

背景:在一些情况下,前台的组件是可以复用的,那这些复用的对象和数据,为了避免直接写在一个vue文件中的混乱性,我们可以为每一个类型的内容,写成一个hooks,以便后面重复利用

一、示例

App.vue

<template>
  <Person/>
</template>
<script lang="ts" setup name="App"> //当前根组件的组件名
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中使用上面的两个组件;

<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"> 点我换小狗</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>

展示效果

在这个例子中,很好地展示了 Vue 3.0 中 hooks 的概念及使用方式。

二、Vue 3.0 中 hooks 的概念

Hooks 是一组以 use 开头的函数,用于在 Vue 3 的函数式组件(使用 setup 函数的组件)中封装和复用有状态的逻辑。它们可以让开发者将组件中的逻辑提取出来,使得代码更加清晰、可维护和可复用。

主要特点包括:

  • 逻辑封装:可以将特定的业务逻辑封装在一个 hook 函数中,例如获取数据、处理状态等。
  • 可复用性:一个 hook 可以在多个组件中复用,避免了重复代码的编写。
  • 清晰的代码结构:通过将相关逻辑集中在 hook 函数中,组件的代码更加简洁明了,易于理解和维护。

在这里解释一下 例子中 hooks 的使用

  • useDog.ts中的 hook:
    • 封装数据和逻辑:在 useDog.ts 中,定义了一个函数,这个函数实际上就是一个 hook。它封装了与获取狗狗图片相关的数据(dogList)和逻辑(getDog 函数用于获取随机狗狗图片的 URL 并添加到 dogList 中)。
    • 响应式数据:使用 reactive 创建了响应式的 dogList,这样当 dogList 的内容发生变化时,使用这个数据的组件会自动更新视图。
    • 异步操作getDog 函数中使用 axios 进行异步请求获取随机狗狗图片的 URL,成功后将其添加到 dogList 中,如果出现错误则弹出错误提示。
  • Person.vue 中的使用:
    • 引入 hook:通过 import useDog from '@/hooks/useDog'; 引入 useDog hook。
    • 解构赋值:使用解构赋值 let { dogList, getDog } = useDog(); 获取 useDog hook 中返回的 dogListgetDog 函数。
    • 模板中使用:在模板中,使用 v-for 遍历 dogList 来展示多个狗狗图片,并且通过点击按钮触发 getDog 函数来获取新的狗狗图片,从而更新视图。

综上所述,这个例子展示了 Vue 3.0 中 hooks 的强大功能,通过封装逻辑和数据,提高了代码的可维护性和可复用性,使得组件的开发更加高效和清晰。

到此这篇关于Vue 3.0 中 hooks 的概念的文章就介绍到这了,更多相关Vue 3.0 hooks内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VUE中v-on:click事件中获取当前dom元素的代码

    VUE中v-on:click事件中获取当前dom元素的代码

    这篇文章主要介绍了VUE中v-on:click事件中获取当前dom元素的代码,文中同时给大家提到了v-on:click获取当前事件对象元素的方法,需要的朋友可以参考下
    2018-08-08
  • Vue使用三种方法刷新页面

    Vue使用三种方法刷新页面

    这篇文章说明了如何使用Vue去刷新当前页面的多种方法实例,有完成的代码提供参考,希望对你有所帮助
    2021-06-06
  • vue如何使用AIlabel标注组件

    vue如何使用AIlabel标注组件

    这篇文章主要介绍了vue如何使用AIlabel标注组件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 在Vue中使用this.$store或者是$route一直报错的解决

    在Vue中使用this.$store或者是$route一直报错的解决

    今天小编就为大家分享一篇在Vue中使用this.$store或者是$route一直报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Vue3中的ref和reactive响应式原理解析

    Vue3中的ref和reactive响应式原理解析

    这篇文章主要介绍了Vue3中的ref和reactive响应式,本节主要介绍了响应式变量和对象,以及变量和对象在响应式和非响应式之间的转换,需要的朋友可以参考下
    2022-08-08
  • 使用Vue实现简单计算器

    使用Vue实现简单计算器

    这篇文章主要为大家详细介绍了使用Vue实现简单计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 关于element-ui的隐藏组件el-scrollbar的使用

    关于element-ui的隐藏组件el-scrollbar的使用

    这篇文章主要介绍了关于element-ui的隐藏组件el-scrollbar的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Vue项目如何实现rsa加密

    Vue项目如何实现rsa加密

    这篇文章主要介绍了Vue项目如何实现rsa加密,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • vue中使用echarts并根据选择条件动态展示echarts图表

    vue中使用echarts并根据选择条件动态展示echarts图表

    虽然老早就看过很多echarts的例子, 但自己接触的项目中一直都没有真正用到过,直到最近才开始真正使用,下面这篇文章主要给大家介绍了关于vue中使用echarts并根据选择条件动态展示echarts图表的相关资料,需要的朋友可以参考下
    2023-12-12
  • vue使用AES.js的步骤详解

    vue使用AES.js的步骤详解

    AES对数据传输加密、解密处理---AES.js,下面分步骤给大家介绍vue使用AES.js的示例代码,感兴趣的朋友跟随小编一起看看吧
    2021-10-10

最新评论