vue 3 第三十三章:自定义 hooks

news2024/11/25 20:32:10

文章目录

  • 1. vue 2 中mixins
    • 1.1. mixins 的缺点:
  • 2. 自定义 hooks
    • 2.1. 创建自定义Hook
    • 2.2. 在组件中使用自定义Hook
  • 2. 总结

1. vue 2 中mixins

在Vue.js 2.x版本中, mixin 被广泛用于将组件的逻辑、计算属性和方法复用到其他组件中。然而,使用 mixin 也存在一些缺点需要注意。

1.1. mixins 的缺点:

  • 命名冲突。当多个mixin中存在相同名称的方法或计算属性时,会发生命名冲突。这会导致组件中的数据和方法被覆盖,从而产生意想不到的行为。
  • 组件依赖关系不明确。使用mixin会增加组件的复杂性,并使组件之间的依赖关系变得不明确。如果一个组件依赖多个mixin,那么这个组件的行为将变得难以预测和维护。
  • 数据来源不可追踪。当一个组件使用多个mixin时,组件的数据来源将变得不可追踪。这会增加代码的调试难度,并导致在维护时出现困难。
  • 混乱的代码结构。使用mixin会导致组件的代码结构变得混乱,因为逻辑和计算属性被分散在多个文件中。这会使代码难以理解和维护。

因此在 Vue 3 中 mixins 被废弃,推荐的做法是使用自定义 hook 。

2. 自定义 hooks

优秀的 hook 库推荐:VueUse

在Vue3中,自定义Hook是一个非常有用的功能,它可以帮助我们重用组件中的逻辑。下面是一个简单的示例,介绍如何在Vue3中创建自定义Hook。

2.1. 创建自定义Hook

要创建自定义Hook,我们可以导出一个函数。以下是一个简单的自定义Hook示例:

// hooks/counter.ts
import { ref } from "vue";

export default function () {
  const count = ref(0);
  const increment = () => {
    count.value++;
  };
  return {
    count,
    increment,
  };
}

在这个示例中,我们创建了一个名为useCounter的自定义Hook,它返回一个包含countincrement方法的对象。count是一个响应式变量,increment用于增加count的值。

2.2. 在组件中使用自定义Hook

以下是一个使用上面定义的useCounter自定义Hook的组件示例:

// hooks.vue
<template>
  <div>
    <div>自定义hook</div>
    <span>count: {{ counter.count }}</span>
    <br />
    <button @click="counter.increment">increment</button>
  </div>
</template>

<script setup lang="ts">
import useCounter from "@/hooks/counter";
const counter = useCounter();
</script>

<style scoped></style>

在这里插入图片描述

2. 总结

本章介绍了 Vue 3 中的自定义 hooks。自定义 hooks 可以帮助我们在 Vue 组件之间共享逻辑,提高代码的可重用性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/616339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题 Java 实现【明明的随机数】【2023Q1 100分】,附详细解题思路

一、题目描述 明明生成了NN个1到500之间的随机整数。请你删去其中重复的数字&#xff0c;即相同的数字只保留一个&#xff0c;把其余相同的数去掉&#xff0c;然后再把这些数从小到大排序&#xff0c;按照排好的顺序输出。 数据范围&#xff1a; 1≤n≤1000 &#xff0c;输入…

springboot+vue游戏项目销售发行系统设计与实现

本游戏销售平台管理员功能有个人中心&#xff0c;用户管理&#xff0c;厂商管理&#xff0c;游戏类型管理&#xff0c;游戏信息管理&#xff0c;众筹项目管理&#xff0c;项目投资管理&#xff0c;论坛管理&#xff0c;管理员管理&#xff0c;系统管理等。厂商发布游戏&#xf…

我在公司彻夜加班,老板居然做出这种事.....

讲道理&#xff0c;我的学历远达不到BAT等名企大厂的要求&#xff0c;去不了好公司我认了&#xff0c;大专毕业的我在找工作的时候发现留给自己的机会并不多&#xff0c;最后去了一家不知名的小公司。入职后才发现这家公司其实就是个外包公司&#xff0c;里面的业务部门和制度相…

使用Mybatis接口开发

文章目录 目录 前言 公司项目用到了mybatis开发接口,虽然很简单,但是mybatis不是特别熟悉,这里学习一下 一、Mybatis接口绑定的两种方式 1.接口绑定实现方式 就是在接口的方法上加上Select,updateInsertDelete等注解 select注解介绍: 简便,能快速去操作sql,它只需要在mapper…

AIGC浪潮来袭,奇点云“数智科技大会”洞见AI加速的数智未来

“进化&#xff0c;发生在每一个数字化场景。” 5月25日&#xff0c;以“数据进化论”为主题&#xff0c;由StartDT&#xff08;奇点云、GrowingIO&#xff09;主办的2023 StartDT Day数智科技大会在杭召开。企业客户、行业专家、技术专家与数万位参会伙伴相聚云上&#xff0c;…

【Linux】shell脚本教程

目录 一、shell历史 二、执行脚本 三、基本语法 3.1变量 3.1.1变量的分类 3.1.2删除变量 3.2文件名代换&#xff08;Globbing&#xff09; 3.3命令代换 3.4算术代换 3.5转义字符 3.6单引号 3.7双引号 四、Shell脚本语法 4.1条件测试 4.2分支 4.2.1if/then/elif…

【SLAM】Kimera-Multi (IEEE-TRO2022 年最佳论文傅京孙)

Kimera-Multi: Robust, Distributed, Dense Metric-Semantic SLAM for Multi-Robot Systems 0 摘要1. 引言2. RELATED WORK3. SYSTEM OVERVIEW4. DISTRIBUTED LOOP CLOSURE DETECTION[4.X Kimera-Multi相关补充](https://github.com/DEARsunshine/Kimera)5. EXPERIMENTS6. CONC…

推箱子-第14届蓝桥杯国赛Scratch真题初中级组第3题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第145讲。 推箱子&#xff0c;本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第3题&am…

苹果iOS证书制作教程

众所周知&#xff0c;如果你需要上架苹果APP就必须要苹果iOS证书进行APP签名&#xff0c;否则苹果手机将无法安装你开发的APP&#xff0c;废话不多说&#xff0c;直接上教程。 第一步&#xff0c;注册账号 准备appleid必须开通双重认证&#xff0c;如果注册个人开发者直接下载d…

深度学习基础知识-tf.keras实例: 加州房价预测

参考书籍&#xff1a;《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (Aurelien Geron [Gron, Aurlien])》 代码有修改&#xff0c;已测通。 简单顺序结构 这次得数据集比之前得简单&#xff0c;只包含数字型特征&#xff0c;没有ocean…

leetcode98. 验证二叉搜索树(java)

验证二叉搜索树 leetcode98. 验证二叉搜索树题目描述 递归法解题思路代码演示 中序遍历解法解题思路代码演示 二叉树专题 leetcode98. 验证二叉搜索树 leetcode 98.验证二叉搜索树 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/…

Linux开发中的辅助工具

文章目录 前言一、add2line二、strip三、ar四、nm五、objdump六、size七、strings总结 前言 本篇文章我们来介绍一些Linux开发中的辅助工具&#xff0c;有了这些辅助工具将会让我们的开发变的更加轻松。 一、add2line addr2line是一个GNU调试工具&#xff0c;用于将程序计数…

priority_queue的模拟实现和仿函数

priority_queue模拟 首先查看源代码&#xff0c;源代码就在queue剩下的部分中 push_heap是STL库中的堆算法&#xff0c;STL库中包装有支持堆的算法&#xff0c;在algorithm.h中&#xff1a; 只要不断用堆的形式插入数据&#xff0c;就会形成堆。 priority_queue模拟——初版 pr…

自定义组件中,使用onLoad,onShow生命周期失效问题

的解决方法 自定义组件中&#xff0c;使用onLoad,onShow生命周期失效问题 自定义组件中&#xff0c;使用onLoad,onShow生命周期失效问题 官方文档可查阅到&#xff1a; 页面生命周期仅在page中的vue页面有效&#xff0c;而单独封装的组件中【页面周期无效】&#xff0c;但是Vu…

Pytorch入门(四)使用VGG16网络训练CIFAR10数据集

本文使用PytorchVGG16官方CIFAR10数据集完成图像分类。识别效果如下&#xff1a; 文章目录 一、VGG16 神经网络结构二、VGG16 模型训练三、预测CIFAR10中的是个类别 一、VGG16 神经网络结构 VGG&#xff0c;又叫VGG-16&#xff0c;顾名思义就是有16层&#xff0c;包括13个卷…

地震勘探基础(十)之地震速度关系

地震速度 地震勘探中引入了多种速度的概念&#xff0c;如下图所示。 层速度、平均速度和均方根速度之间的关系 层速度指的是某一套地层垂向上&#xff0c;由于地质条件相对稳定&#xff0c;地层顶底厚度比上地震波的传播时间为层速度&#xff0c;用 v n v_n vn​ 表示。 如下…

一文看懂软件架构4+1视图

目录 一、概述 二、各视图详解 1. 场景视图 2. 逻辑视图 3. 开发视图 4. 处理视图 5. 物理视图 葵花宝典&#xff1a;一看就懂的理解方式 一、概述 41视图包括&#xff1a; 场景视图&#xff08;也叫用例视图&#xff09;&#xff1a;黑盒视图。从外部视角&#xff…

chatgpt赋能python:Python如何分段数据的平均数

Python如何分段数据的平均数 Python是一门极其流行的编程语言&#xff0c;广泛应用于数据分析与科学计算领域。在数据分析中&#xff0c;计算各个数据段的平均数是一项常见的任务。本文将介绍如何使用Python分段计算数据的平均数&#xff0c;以及如何优化这一过程以使速度更快…

Linux中的lrzsz

一、介绍 lrzsz是一款在Linux里可代替ftp上传和下载的程序,也就是一款软件。它是开发者常用的一款工具,这个工具用于windows机器和远端的Linux机器通过XShell传输文件。 二、lrzsz的安装 在安装之前,我们可以使用下述命令先查看yum仓库中是否存在我们要安装的软件: yum…

CentOS7使用Docker快速安装Davinci

环境信息 操作系统&#xff1a;CentOS7Docker : 23.0.6 &#xff08;已配置阿里云镜像加速&#xff09; 安装步骤 安装docker-compose-plugin 官方的例子使用的是docker-compose&#xff0c;但是由于yum能够安装的最新斑斑是1.x,而且官方的docker-compose要求最低版本为2.2以…