Vue 3 解锁Hooks

在Vue2时,我们通常使用Options API来定义组件。而Vue 3的Hooks则采用了类似于React的函数式编程模型。使用Hooks,你可以在函数式组件中引入状态、计算属性、方法等功能,从而实现更灵活和可维护的代码结构。

一、hooks和mixin的区别

hooks

  • Hooks是Vue 3中引入的特性,用于函数式组件。
  • Hooks提供了一种更简洁和可重用的方式来处理组件的状态和逻辑。
  • Hooks通过将相关的代码逻辑封装到可复用的函数中,使得代码更易于阅读、理解和维护。
  • Hooks在组件内部使用,可以让你在不使用类组件的情况下实现相似的功能。

mixin

  • mixin是Vue 2中的特性,用于对象式组件。
  • mixin允许开发人员将一些通用的功能和逻辑混入多个组件中。
  • mixin通过将公共代码注入到组件中,使得代码可以在多个组件之间共享和重用。
  • mixin使用对象的形式定义,并利用Vue的混入机制将其应用到组件中。
  • mixin的使用可能会导致命名冲突和代码耦合问题,因此需要小心使用以避免潜在的问题。

区别

  • 语法:Hooks是函数式组件的特性,使用函数和特定的Hooks函数创建组件;Mixin是对象式组件的特性,使用对象进行定义和混入。
  • 命名冲突:Hooks避免了命名冲突问题,因为每个函数式组件都是独立的;Mixin使用时需要小心命名,以避免冲突。
  • 组件作用域:Hooks在组件内部定义和使用,不会影响其他组件;Mixin可以影响到混入的所有组件,可能导致难以追踪和调试的问题。

二、hooks和组件的执行顺序

谁先创建谁先执行


//hook/index.ts
import { onMounted } from "vue";
export const useAdd = () => {
  onMounted(() => {
    console.log("hooks的onMounted");
  });

  return "hello word";
};


//APP.vue
<template>{{ a }}</template>
<script setup lang="ts">
import { onMounted } from "vue";
import { useAdd } from "@/hooks/index";

onMounted(() => {
  console.log("组件的onMounted");
});
const a = useAdd();
</script>

<style scoped lang="scss"></style>

若调用的hook放在组件生命周期之后,执行结果为:
在这里插入图片描述
若调用的hook放在组件生命周期之前,执行结果为:

在这里插入图片描述

三、简单计时器实现

//hook/index.ts
import { ref } from "vue";
export const useComputed = () => {
  const num = ref(0);
  const add = () => {
    num.value++;
  };
  const subtraction = () => {
    num.value--;
  };
  return {
    num,
    add,
    subtraction,
  };
};


//APP.vue
<template>
  <button @click="add">增加</button>
  <button @click="subtraction">减少</button>
  <span>{{ num }}</span>
</template>
<script setup lang="ts">
import { useComputed } from "@/hooks/index";
const { add, subtraction, num } = useComputed();
</script>

<style scoped lang="scss"></style>


四、总结

Vue 3的Hooks为我们带来了更加灵活和可维护的代码结构。通过使用ref、computed、watchEffect等内置的Hooks函数,以及自定义自己的Hooks函数,我们可以更好地处理组件的状态和逻辑,并使得代码更易于阅读和维护。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值