Vue3中hook的使用及使用中遇到的坑

前言

在学习Es6的时候,我们开始使用类与对象,开始模块化管理;在Vue中我们可以使用mixin进行模块化管理;Vue3中同样存在模块化管理,需要使用到hook函数。

本节博客就针对Vue3中的hook函数进行讲解,在讲解中会穿插hook使用中遇到的坑和需要注意的东西。(标黄部分)

一,什么是hook

hook的本质是一个函数,把setup函数中使用的composition Api进行了封装,类似于Vue2中的mixin。

二, hook函数的使用

2.1 铺垫

我们先来写一段很简单的代码:

<template>
  <div>我是App组件</div>
  <div>sum的值为{{ sum }}</div>
  <button @click="add">点击sum的值加1</button>
</template>

<script>
import {ref} from 'vue'
export default {
    name: 'App',
    setup() {
        let sum = ref(0)
        function add() {
            sum.value ++
        }

        return {sum, add}
    }
}
</script>

<style>

</style>

上面的代码简单的用ref定义了一个sum,并且设置了一个按钮,如若点击则sum值可加一。
在这里插入图片描述
如果现在,有五个组件都要实现类似的功能,想请问大家,是不是要把这段代码复制粘贴五次呢?

其实不用,了解模块化管理的读者可以猜到,Vue3中也可以实现,代码只写一次,需要时复用的功能——hook函数。

且看hook函数的讲解。

2.2 hook函数的写法

很简单,首先我们创建一个名为hooks的文件夹,内部创建一个js文件,js文件名可以根据功能来取:
在这里插入图片描述
把我们刚刚写的关于sum的部分粘贴到这个js文件中:
在这里插入图片描述

接着,我们把这些内容放到一个函数中并暴露出去,注意:ref是需要引用才能使用的,在js文件中依旧需要引入。
在这里插入图片描述

别忘了把需要用到的东西return出去:
在这里插入图片描述

以上,文件就已经写好了。

2.3 使用写好的hook函数

接下来我们要在App.vue中使用刚刚写好的addSum模块。

一共有三个步骤:引用、接收、暴露。

首先,引用:在App.vue组件中import:
在这里插入图片描述
其次,接收,这里特别容易出错!!
这里我需要强调几点:首先,let后面定义的东西不能与addSum同名,这是个大坑,会报错。其次就是,最好像我下面这样解构一下。不然你用的时候只能像别的案例一样只获取一个值。
在这里插入图片描述
最后,别忘记把我们接收到的sum,add返回出去。
在这里插入图片描述

后记

本篇博客中遇见的问题笔者花了很久才解决。如果还有什么问题可以在评论区里面发表。

欢迎关注,期待跟您带来更好的文章。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3,我们可以使用Composition API来封装组件和自定义Hooks函数。引用提到的文章《浅谈:为啥vue和react都选择了Hooks🏂?》给出了对Hook的介绍和解释。通过使用Hooks,我们可以更好地解决在组件封装过程遇到的问题。 在Vue3,我们可以使用Composition API来封装我们的组件。引用提到的JeecgBoot—Vue3版前端源码是一个使用Vue3.0和Ant-Design-Vue等新技术方案进行开发的项目。它采用了Composition API来进行二次封装组件、utils、hooks等功能的实现。 使用Composition API封装Hooks函数可以实现代码的复用。引用提到,Composition API相比Vue2的mixin更清晰地展示了Hooks函数的来源和功能。通过自定义封装的Hooks函数,我们可以将常用的逻辑进行抽离,并在多个组件进行复用。 因此,通过使用Composition API和自定义Hooks函数,我们可以在Vue3进行组件的封装和复用。这样可以更好地解决在合作开发每个人封装习惯不同的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue3 hooks 组件封装](https://blog.csdn.net/longxiaobao123/article/details/128784119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [JeecgBoot平台前端Vue3源码](https://download.csdn.net/download/dcs_pk/88099139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Vue3 Hooks函数使用及封装思想](https://blog.csdn.net/m0_46846526/article/details/131252270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值