Vue3:自界说hooks,实现逻辑代码封装,加强代码的复用性和可维护性(axios ...

打印 上一主题 下一主题

主题 766|帖子 766|积分 2298

一、情形阐明

在Vue2中,我们想要实现代码的封装与复用性,采用的技能是mixin。
mixin技能案例演示:https://blog.csdn.net/Brave_heart4pzj/article/details/135483606
而在Vue3中,我们则使用hooks来实现这个结果。
什么是hook?—— 本质是一个函数,把setup函数中使用的Composition API举行了封装
我们可以用js文件或者ts文件来封装
hook的命名规范:useXxxx
二、案例

1、创建hook

useDog.ts
使用axios请求接口,获取数据,并使用了生命周期函数onMounted
  1. import {reactive,onMounted} from 'vue'
  2. import axios from 'axios'
  3. export default function (){
  4.   // 数据
  5.   let dogList = reactive([
  6.     'https://images.dog.ceo/breeds/pembroke/n02113023_4373.jpg'
  7.   ])
  8.   // 方法
  9.   async function getDog(){
  10.     try {
  11.       let result = await axios.get('https://dog.ceo/api/breed/pembroke/images/random')
  12.       dogList.push(result.data.message)
  13.     } catch (error) {
  14.       alert(error)
  15.     }
  16.   }
  17.   // 钩子
  18.   onMounted(()=>{
  19.     getDog()
  20.   })
  21.   // 向外部提供东西
  22.   return {dogList,getDog}
  23. }
复制代码
useSum.ts
  1. import { ref ,onMounted,computed} from 'vue'
  2. export default function () {
  3.   // 数据
  4.   let sum = ref(0)
  5.   let bigSum = computed(()=>{
  6.     return sum.value * 10
  7.   })
  8.   // 方法
  9.   function add() {
  10.     sum.value += 1
  11.   }
  12.   // 钩子
  13.   onMounted(()=>{
  14.     add()
  15.   })
  16.   // 给外部提供东西
  17.   return {sum,add,bigSum}
  18. }
复制代码
2、使用hook

Person.vue
在person组件中使用hook
  1. <template>
  2.     <div className="person">
  3.         <h2>当前求和为:{{ sum }},放大10倍后:{{ bigSum }}</h2>
  4.         <button @click="add">点我sum+1</button>
  5.         <hr>
  6.         <img v-for="(dog,index) in dogList" :src="dog" :key="index">
  7.         <br>
  8.         <button @click="getDog">再来一只小狗</button>
  9.     </div>
  10. </template>
  11. <script lang="ts" setup name="Person">
  12.     import useSum from '@/hooks/useSum'
  13.     import useDog from '@/hooks/useDog'
  14.     const {sum, add, bigSum} = useSum()
  15.     const {dogList, getDog} = useDog()
  16. </script>
  17. <style scoped>
  18.     .person {
  19.         background-color: skyblue;
  20.         box-shadow: 0 0 10px;
  21.         border-radius: 10px;
  22.         padding: 20px;
  23.     }
  24.     button {
  25.         margin: 0 5px;
  26.     }
  27.     li {
  28.         font-size: 20px;
  29.     }
  30.     img {
  31.         height: 100px;
  32.         margin-right: 10px;
  33.     }
  34. </style>
复制代码
经过案例的练习,我们可以明显的感觉到,Vue3的hook和Vue2的mixin作用非常相似
在语法上有较大差异。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表