首页 > 其他分享 >Vue3实战笔记(40)—组件逻辑复用:自定义Hooks的完全指南

Vue3实战笔记(40)—组件逻辑复用:自定义Hooks的完全指南

时间:2024-05-25 17:29:54浏览次数:22  
标签:生命周期 const 自定义 Hooks Utils 40 组件

文章目录


前言

自定义Hooks是Vue3中的一个重要特性,它允许您创建可重用的函数,以便在组件之间共享状态和逻辑。以下是一些关于自定义Hooks的常见用法。


一、状态管理

使用reactive或ref来创建响应式数据,并在组件中使用这些数据。例如,您可以创建一个名为useCounter的自定义Hook,用于管理计数器的状态和操作。


import { reactive } from 'vue';

export default function useCounter() {
  const state = reactive({
    count: 0,
  });

  const increment = () => {
    state.count++;
  };

  return {
    state,
    increment,
  };
}

二、副作用处理

使用watch或watchEffect来监听响应式数据的变化,并执行相应的副作用。例如,您可以创建一个名为useFetch的自定义Hook,用于获取远程数据。


import { ref, watchEffect } from 'vue';
import axios from 'axios';

export default function useFetch(url) {
  const data = ref(null);
  const error = ref(null);

  watchEffect(async () => {
    try {
      const response = await axios.get(url);
      data.value = response.data;
    } catch (err) {
      error.value = err;
    }
  });

  return {
    data,
    error,
  };
}

三、 生命周期钩子

使用onMounted、onUnmounted等生命周期钩子来处理组件的生命周期事件。例如,您可以创建一个名为useInterval的自定义Hook,用于在组件挂载时启动定时器,并在卸载时清除定时器。):



import { onMounted, onUnmounted } from 'vue';

export default function useInterval(callback, interval) {
  let timer;

  onMounted(() => {
    timer = setInterval(callback, interval);
  });

  onUnmounted(() => {
    clearInterval(timer);
  });
}

其实一直有个疑问,正好也记录一下,这样自定义hooks和utils封装工具类有什么区别?不是一回事儿吗?

Vue3中的Hooks和Utils确实存在区别。具体分析如下:

Vue3 Hooks:是与Vue运行时紧密相关的函数,它们通常在特定的生命周期阶段执行,或者与Vue的API(如响应式系统)交互。Hooks可以访问组件的上下文,如setup函数内的reactive、ref等响应式数据,以及生命周期钩子如onMounted。这些特性使得Hooks能够在组件间共享状态和副作用,类似于mixin,但更加灵活和强大。

Utils:通常是纯粹的函数或工具类方法,它们不依赖于Vue的运行时环境,也不包含响应式API。Utils的主要目的是封装通用逻辑,以便在不同的地方重复使用,而不特定于Vue组件的生命周期或状态管理。

总的来说,Hooks和Utils在Vue3中扮演着不同的角色。Hooks是为了在Vue组件中更好地管理状态和副作用,而Utils则是为了编写可重用的通用函数。在实际开发中,根据需要选择合适的模式来组织代码,可以使应用更加清晰和高效。


总结

通过创建自定义Hooks,可以将组件的逻辑和状态提取到可重用的函数中,从而使代码更加模块化和易于维护。

离别之花,在心中盛开, 哀愁的种子,生根发芽。 但愿这花,开得璀璨耀眼, 让离别的苦涩,化作芬芳的源泉。

标签:生命周期,const,自定义,Hooks,Utils,40,组件
From: https://blog.csdn.net/loveshenhaitao/article/details/139184592

相关文章

  • 芝奇发布全新旗舰皇家戟DDR5内存:首发频率高达8400MHz
    凭借华丽设计、超高规格、极致性能在圈内享誉已久的芝奇TridentZ5Royal皇家戟内存,终于进入了DDR5时代,首发频率就高达8400MHz。皇家戟DDR5内存延续了该系列超跑一般的独特流线造型,厚重精实的高质量铝合金散热马甲,经过精工细腻的电镀处理,呈现出水镜般清澈透亮的高质感光泽,经典金......
  • HarmonyOS 鸿蒙应用开发 - 创建自定义组件
     开发者定义的称为自定义组件。在进行UI界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。1、创建自定义组件1、组件必须使用 @Component 修......
  • BUUCTF-Misc(31-40)
    荷兰宽带数据泄露参考Bugku宽带信息泄露详解MISC_bugku宽带信息泄露-CSDN博客bin文件:二进制文件,其用途依系统或应用而定。一种文件格式binary的缩写。一个后缀名为".bin"的文件,只是表明它是binary格式。比如虚拟光驱文件常用".bin"作为后缀,但并不意味着所有的bin文件都是虚......
  • 线段树维护区间字符的两道例题(CF240F CF558E)
    CF240F:https://www.luogu.com.cn/problem/CF240F题目大意:给定一个长为n的由a到z组成的字符串,有m次操作,每次操作将[l,r]的字符串进行重排,得到字典序最小的字符串,输出m次操作后的字符串。大致思路:1.首先我们要想区间内的字典序最小的回文串要怎么构造。回文串无非就两种类型:有一......
  • [pdf,epub]《软件方法》2024版电子书共290页(202405更新)
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集已上传本账号CSDN资源。或者到以下链接下载:http://www.umlchina.com/url/softmeth2024.html,或点击“阅读原文”。如果需要提取码:umlc已排版成适合手机阅读。......
  • 代码随想录算法训练营第第17天 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子
    三道题都没想出来,还是要加强递归的练习110.平衡二叉树(优先掌握递归)再一次涉及到,什么是高度,什么是深度,可以巩固一下。题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.平衡二叉树.htmlfunctiongetHeight(node){if(node===null)return0;letleftH......
  • C++ 组含子项自定义排序通用设计
    #include<memory>classBase;usingBaseSp=std::shared_ptr<Base>;classBase{public:  explicitBase(intid):ID(id){}  intID;};classSorter{public:  virtualboolsort(constBaseSp&l,constBaseSp&r){returntrue;......
  • 报错 OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, -1 max
    跑whisper报错OpenBLASblas_thread_init:RLIMIT_NPROC4096current,-1maxPython创建大量线程时遇上OpenBLASblas_thread_init报错怎么办?https://www.cnblogs.com/shiyanhe/p/13604707.html解决办法:在shell脚本设置参数即可解决。exportOPENBLAS_NUM_THREADS=2......
  • Mybatis-plus核心功能-自定义SQL
    MyBatis-Plus提供了强大的条件构造器。通过条件构造器可以写一些复杂的SQL语句,从而提高我们的开发效率。通过EntityWrapper(简称EW,MP封装的一个查询条件构造器)或者Condition(与EW类似)来让用户自由的构建查询条件,简单便捷,没有额外的负担,能够有效提高开发效率,它主要用于处理......
  • Leetcode 力扣97. 交错字符串 (抖音号:708231408)
    给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s=s1+s2+...+snt=t1+t2+...+tm|n-m|<=1交错 是 s1+t1+s2+t......