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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue3中getCurrentInstance示例讲解

    vue3中getCurrentInstance示例讲解

    这篇文章主要给大家介绍了关于vue3中getCurrentInstance的相关资料,文中还介绍了Vue3中关于getCurrentInstance的大坑,需要的朋友可以参考下
    2023-03-03
  • vue-cli3使用postcss-plugin-px2rem方式

    vue-cli3使用postcss-plugin-px2rem方式

    这篇文章主要介绍了vue-cli3使用postcss-plugin-px2rem方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 使用开源Cesium+Vue实现倾斜摄影三维展示功能

    使用开源Cesium+Vue实现倾斜摄影三维展示功能

    这篇文章主要介绍了使用开源Cesium+Vue实现倾斜摄影三维展示,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Vue2实现子组件修改父组件值的方法小结

    Vue2实现子组件修改父组件值的方法小结

    在 Vue 2 中,子组件不能直接修改父组件的值,因为 Vue 遵循单向数据流的原则,为了实现子组件修改父组件的数据,本文给大家介绍了Vue2实现子组件修改父组件值的四种方法,并通过代码示例讲解的非常详细,需要的朋友可以参考下
    2025-03-03
  • Nuxt不同环境如何区分的方法

    Nuxt不同环境如何区分的方法

    在一般情况下,我们的项目肯定需要区分不同环境,那么Nuxt提供给我们这样的基本能力了么,下面我们就一起来了解一下
    2021-05-05
  • vue兄弟组件传递数据的实例

    vue兄弟组件传递数据的实例

    今天小编就为大家分享一篇vue兄弟组件传递数据的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue中使用装饰器的方法详解

    Vue中使用装饰器的方法详解

    装饰器是一种与类相关的语法糖,用来包装或者修改类或者类的方法的行为,其实装饰器就是设计模式中装饰者模式的一种实现方式,下面这篇文章主要给大家介绍了关于Vue中使用装饰器的相关资料,需要的朋友可以参考下
    2022-01-01
  • VUE递归树形实现多级列表

    VUE递归树形实现多级列表

    这篇文章主要为大家详细介绍了VUE递归树形实现多级列表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • unplugin-vue-components解决命名冲突问题

    unplugin-vue-components解决命名冲突问题

    这篇文章主要介绍了unplugin-vue-components解决命名冲突问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue之定义全局工具类问题

    Vue之定义全局工具类问题

    这篇文章主要介绍了Vue之定义全局工具类问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论