vue3必学技能--自定义Hooks让vue3更加畅快

34 篇文章 10 订阅 ¥299.90 ¥99.00

vue3必学技能–自定义Hooks让vue3更加畅快

Hooks在前端领域并没有明确定义,借用知乎大佬的定义:在JS里是callback,事件驱动,集成定义一些可复用的方法。

Vue3官方文档并没有对自定义Hooks做任何定义,却无处不在在使用这个技巧,很多开源项目也在用这个技巧,所以作为一个合格的Vuer学会自定义Hooks让Composition Api写起来更丰满是十分必要的!(飞机-官方文档在偷偷使用自定义Hooks)

Vue3自定义Hooks定义:

个人理解:一些可复用的方法像钩子一样挂着,可以随时被引入和调用以实现可复用的方法高内聚低耦合的目标,应该都能算是hook;

为什么Vue3要用自定义Hook?:

结论:就是为了让Compoosition Api更好用更丰满,让写Vue3更畅快!像写诗一样写代码!
其实这个问题更深意义是为什么Vue3比Vue2更好!无外呼性能大幅度提升,其实编码体验也是Vue3的优点Composition Api的引入(解决Option Api在代码量大的情况下的强耦合) 让开发者有更好的开发体验。但是这些所谓的提高开发体验都是需要开发者不断学习养成编码好习惯

写Vue3请摆脱Vue2无脑this的思想:

写Vue2中很多同学养成了 Option Api无脑this的习惯,来到Vue3Composition Api还是习惯性想用this,更有人为了写this不惜引入getCurrentInstance!这大可不必!

Composition Api的优点之一就是摆脱无脑this导致的强耦合,功能之间互相this,变量和方法在各个方法混杂,无处不在的this是强耦合的,虽然方便,但是碎片化的option api 后期维护是麻烦的
我相信写Vue2的同学,一定深有感触,一个组件下定义大量变和大量方法,方法嵌套方法,方法之间互相共享变量,维护这样的代码,看似容易理解的Option Api写法,我们需要在methos、data、template之间来回切,Option Api这种写法,代码量和功能小巧时是十分简单明了的,但是代码量一多,功能一复杂,我相信review代码的时候头都痛。
相对的Composition Api在功能复杂、代码量巨大的组件下,我们配合自定义Hooks,将代码通过功能分块写,响应变量和方法在一起定义和调用,这样后期我们改功能A只需要关注功能A块下的代码,不会像Vue2Option Api需要同时关注methos和data。。。。。

大胆定义一下Vue3的自定义Hook:

虽然官方没有明确指明或定义什么是自定义Hooks,但是却无处不在用;

以函数形式抽离一些可复用的方法像钩子一样挂着,随时可以引入和调用,实现高内聚低耦合的目标;

1/将可复用功能抽离为外部JS文件

2/函数名/文件名以use开头,形如:useXX

3/引用时将响应式变量或者方法显式解构暴露出来如:const {nameRef,Fn} = useXX()

(在setup函数解构出自定义hooks的变量和方法)

来一个简单的自定义Hook:

1、addHook.js

import {ref,watch} from "vue"
const useAdd = ({num1,num2})=>{
  const addNum = ref(0);
  watch([num1,num2],(num1,num2)=>{
    addFunc(num1,num2)
  })
  const addFunc = (num1,num2)=>{
    addNum.value = num1+num2
  }
  return {
    addNum,
    addFunc
  }
}
export default useAdd

2、cutHook.js

import {ref,watch} from "vue"
export function useCut({num1,num2}){
   const cutNum = ref(0);
   watch([num1,num2],(num1,num2)=>{
    cutFunc(num1,num2)
  })
  const cutFunc = (num1,num2)=>{
    cutNum.value = num1+num2
  }
  return {
    cutNum,
    cutFunc
  }
}

使用hooks

<template>
    <div>
        num1:<input v-model.number="num1" style="width:100px" />
        <br />
        num2:<input v-model.number="num2" style="width:100px" />
    </div>
    <span>加法等于:{{ addNum }}</span>
    <br />
    <span>减法等于:{{ cutNum }}</span>
</template>
import { ref } from 'vue'
import useAdd from './addHook.js'     //引入自动hook 
import { useCut } from './cutHook.js' //引入自动hook 
const num1 = ref(2)
const num2 = ref(1)
//加法功能-自定义Hook(将响应式变量或者方法形式暴露出来)
const { addNum, addFunc } = useAdd({ num1, num2 })
addFn(num1.value, num2.value)
//减法功能-自定义Hook (将响应式变量或者方法形式暴露出来)
const { cutNum, cutFunc } = useCut({ num1, num2 })
subFn(num1.value, num2.value)

总结:

1、Vue2时代Option Api ,data、methos、watch…分开写,这种是碎片化的分散的,代码一多就容易高耦合,维护时来回切换代码是繁琐的!

2、Vue3时代Composition Api,通过利用各种Hooks和自定义Hooks将碎片化的响应式变量和方法按功能分块写,实现高内聚低耦合

3形象的讲法:Vue3自定义Hooks是组件下的函数作用域的,而Vue2时代的Mixins是组件下的全局作用域。全局作用域有时候是不可控的,就像var和let这些变量声明关键字一样,const和let是var的修正。Composition Api正是对Vue2时代Option Api 高耦合和随处可见this的黑盒的修正,Vue3自定义Hooks是一种进步。

4、把Mixin和自定义Hook进行比较,一个是Option Api的体现,一个是Composition Api的体现。如果能理解高内聚低耦合的思想,那么就能理解为什么Vue3是使用Composition Api,并通过各种自定义Hooks使代码更强壮。像写诗一样写代码。而不是写屎。

原文链接地址:https://juejin.cn/post/7083401842733875208

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vue3的自定义hooks函数是在Vue3中使用Composition API的一种方式。它允许我们在setup函数中定义函数和状态,并将其封装在外部的js文件中,以便在主文件中进行调用。通过使用自定义hooks函数,我们可以实现函数的复用,使代码更加简洁高效。自定义hooks函数可以帮助我们提高代码的复用性,让我们能够在不同的组件中都利用hooks函数。虽然使用Composition API可能会比之前的Vue写法更加麻烦,但是通过使用自定义hooks函数,我们可以实现函数编程的复用,使代码更加简洁高效。在前端领域,Hooks并没有明确定义,但在Vue3中,自定义Hooks函数被广泛应用于开发中,它可以集成定义一些可复用的方法,让我们的代码更加丰满。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [学习Vue3 第二十八章(自定义Hooks)](https://blog.csdn.net/qq1195566313/article/details/123271189)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [对vue3自定义hooks的理解](https://blog.csdn.net/a1598452168YY/article/details/128294569)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vue3必学技能--自定义Hooks让vue3更加畅快](https://blog.csdn.net/qq_39197547/article/details/125740319)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值