vue3自定义hooks

server/2024/9/24 1:44:43/

引言

Vue3引入了组合式API,使得代码逻辑更自由、灵活。其中自定义Hooks能让我们将客服用的逻辑抽离成一个独立的函数,以实现在多个组件中复用的目的。可以简单理解成封装成一个模块,以方便其他地方调用。

实现

自定义hooks

useDog

javascript">import axios from "axios";
import { reactive } from "vue";export default function(){// 数据let dogList = reactive(["https://images.dog.ceo/breeds/pembroke/n02113023_4373.jpg",]);// 方法async function getDogList() {try {debugger;let result = await axios.get("https://dog.ceo/api/breed/pembroke/images/random");console.log(result.data.message);dogList.push(result.data.message);} catch (error) {console.log(error);}}// 返回数据和方法return {dogList,getDogList}
}

useNum

javascript">import { ref } from 'vue'export default function(){// 数据let num = ref(0)// 自增方法function increment() {num.value++}// 自减方法function decrement() {num.value--}// 返回数据和方法return {num,increment,decrement}
}

使用Hooks

<script lang="ts" setup name="App">javascript">import useDog from '@/hooks/useDog'import useNum from './hooks/useNum';let {dogList, getDogList} = useDog()let {num, increment, decrement} = useNum()
</script><template><div class="container">现在的值是: {{ num }}<button class="button" @click="increment">+</button><button class="button" @click="decrement">-</button><img v-for="(item,index) in dogList" :src="item" :key="index" /><button class="button" @click="getDogList">新增一条狗</button></div>
</template><style scoped>.container {display: flex;flex-direction: column; /* 垂直排列 */align-items: center; /* 居中对齐 */padding: 20px; /* 内边距 */background-color: #f9f9f9; /* 背景颜色 */border-radius: 10px; /* 圆角 */box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); /* 阴影效果 */}.button {background-color: #4CAF50; /* 按钮背景颜色 */color: white; /* 按钮文字颜色 */border: none; /* 去掉边框 */padding: 10px 20px; /* 内边距 */margin: 5px 0; /* 上下间距 */border-radius: 5px; /* 圆角 */cursor: pointer; /* 鼠标指针样式 */transition: background-color 0.3s; /* 背景颜色渐变效果 */}.button:hover {background-color: #45a049; /* 悬停时背景颜色 */}img {width: 200px; /* 图片宽度 */margin: 10px; /* 图片的上下左右间距 */border-radius: 10px; /* 图片圆角 */box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); /* 图片阴影效果 */}  
</style>

实现效果

在这里插入图片描述

书写规范

  1. 命名规范:自定义Hooks应该以“use”为前缀,以区分其他函数和变量。例如:useUserInfo、useMousePosition等。同时,命名应清晰明了,准确描述Hooks的功能。
  2. 参数与返回值:自定义Hooks应该接收明确的参数,并返回需要在组件中使用的响应式数据、方法、计算属性等。返回的对象应该具有清晰的属性名和结构。

http://www.ppmy.cn/server/121099.html

相关文章

java 异常-Exception

异常的概念 Java 语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”。&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 执行过程中所发生的异常事件可分为两大类 &#xff08;1&#xff09;Error&#xff08;错误&#xff09;&#xff1a;Java 虚…

集群软件在linux上的安装

前置准备 为了保证各个服务器之间的正常通信&#xff0c;要完成集群化环境的前置准备&#xff0c;包括创建多台虚拟机&#xff0c;配置主机名映射&#xff0c;SSH免密登录等等。 配置多个虚拟机 配置多台Linux虚拟机 安装集群化软件&#xff0c;首要条件就是要有多台Linux服务…

乐观锁、悲观锁及死锁

乐观锁、悲观锁 1.概念 悲观锁(悲观锁定)&#xff1a;具有强烈的独占和排他特性。在整个执行过程中&#xff0c;将处于锁定状态。悲观锁在持有数据的时候总会把资源或者数据锁住&#xff0c;这样其他线程想要请求这个资源的时候就会阻塞&#xff0c;直到等到悲观锁把资源释放为…

Vue + element-ui实现动态表单项以及动态校验规则

Vue element-ui实现动态表单项以及动态校验规则 情境 项目需要实现一个功能&#xff0c;表单中某个表单项产品id支持动态新增多个产品id表单项&#xff0c;每个产品id表单项都需要有校验规则&#xff0c;校验失败时各自有对应的校验提示 重点分析 表单对象内字段并非固定&…

ECMAScript和JavaScript的区别:解密JavaScript的标准和实现

ECMAScript和JavaScript的区别&#xff1a;解密JavaScript的标准和实现 作为一名程序软件专家&#xff0c;我经常被问到ECMAScript和JavaScript的区别。虽然这两个术语经常被混用&#xff0c;但它们实际上是不同的概念。在本文中&#xff0c;我们将深入探讨ECMAScript和JavaSc…

银河麒麟桌面操作系统V10(SP1)ssh服务安装与配置

在国产化的大背景下,各种国产操作系统逐步进入运维人员的视野,ssh作为linux远程连接工具,是运维人员必需的工具之一。本文主要介绍在银河麒麟桌面操作系统V10(SP1)上安装和配置ssh服务。 准备工作 1、查看操作系统信息 cat /etc/os-release 笔者操作系统为银河麒麟桌面操…

卷积神经网络-数据增强

文章目录 一、概述二、数据增强的类别1. 裁剪2.翻转和旋转3. 随机遮挡4. 图像变换5. 对transforms的选择操作&#xff0c;使数据增强更灵活 三、应用场景四、总结 一、概述 数据增强&#xff08;也叫数据扩增&#xff09;的目的是为了扩充数据和提升模型的泛化能力。有效的数据…

图文深入理解SQL语句的执行过程

List item 本文将深入介绍SQL语句的执行过程。 一.在RDBMS&#xff08;关系型DB&#xff09;中&#xff0c;看似很简单的一条已写入DB内存的SQL语句执行过程却非常复杂&#xff0c;也就是说&#xff0c;你执行了一条诸如select count(*) where id 001 from table_name的非常简…