【Vue】Vue3.0(十五)Vue 3.0 中 hooks 的概念

🏡作者主页:点击!

🤖Vue专栏:点击!

⏰️创作时间:2024年10月22日21点50分

背景:在一些情况下,前台的组件是可以复用的,那这些复用的对象和数据,为了避免直接写在一个vue文件中的混乱性,我们可以为每一个类型的内容,写成一个hooks,以便后面重复利用

一、示例

在这里插入图片描述
App.vue


<template><Person/>
</template><script lang="ts" setup name="App"> //当前根组件的组件名
import Person from './components/Person.vue'</script><style >
.app {
background-color: #ddd;
box-shadow: 0 0 10px;
border-radius: 10px;
padding: 20px;
}
</style>**useSum.ts**```html
import {ref,reactive, computed} from 'vue'
import axios from 'axios' export default function(){
let sum =ref(0);
let bigSum =computed(()=>{return sum.value*10;
})function addSum(){sum.value+=1;
}return {sum,addSum,bigSum}}

useDog.ts

import {ref,reactive} from 'vue'
import axios from 'axios' export default function(){let dogList = reactive(['https://images.dog.ceo//breeds//pembroke//n02113023_11091.jpg'
]);async function getDog(){try{let result = await axios.get('https://dog.ceo/api/breed/pembroke/images/random');dogList.push(result.data.message)}catch(error){alert(error);}}return {dogList,getDog};}

Person.vue,在此vue中使用上面的两个组件;

<template><div class="person"><h2>求和:{{sum}}====bigSum:{{bigSum}}</h2><button @click="addSum">和加一</button><hr/><img v-for="(dog,index) in dogList" :key="index" :src="dog"><br/><button @click="getDog"> 点我换小狗</button></div>
</template><script lang="ts" setup name="Person">
import useDog from '@/hooks/useDog';
import useSum from '@/hooks/useSum';let {dogList,getDog} = useDog();let {sum,addSum,bigSum} = useSum();
</script><style scoped>
.person {background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;
}li {font: 1em sans-serif;
}img {height: 100px;margin-right: 10px;
}
</style>

展示效果

在这里插入图片描述

在这个例子中,很好地展示了 Vue 3.0 中 hooks 的概念及使用方式。

二、Vue 3.0 中 hooks 的概念

Hooks 是一组以 use 开头的函数,用于在 Vue 3 的函数式组件(使用 setup 函数的组件)中封装和复用有状态的逻辑。它们可以让开发者将组件中的逻辑提取出来,使得代码更加清晰、可维护和可复用。

主要特点包括:

  1. 逻辑封装:可以将特定的业务逻辑封装在一个 hook 函数中,例如获取数据、处理状态等。
  2. 可复用性:一个 hook 可以在多个组件中复用,避免了重复代码的编写。
  3. 清晰的代码结构:通过将相关逻辑集中在 hook 函数中,组件的代码更加简洁明了,易于理解和维护。

在这里解释一下 例子中 hooks 的使用

  1. useDog.ts中的 hook

    • 封装数据和逻辑:在 useDog.ts 中,定义了一个函数,这个函数实际上就是一个 hook。它封装了与获取狗狗图片相关的数据(dogList)和逻辑(getDog 函数用于获取随机狗狗图片的 URL 并添加到 dogList 中)。
    • 响应式数据:使用 reactive 创建了响应式的 dogList,这样当 dogList 的内容发生变化时,使用这个数据的组件会自动更新视图。
    • 异步操作getDog 函数中使用 axios 进行异步请求获取随机狗狗图片的 URL,成功后将其添加到 dogList 中,如果出现错误则弹出错误提示。
  2. Person.vue 中的使用

    • 引入 hook:通过 import useDog from '@/hooks/useDog'; 引入 useDog hook。
    • 解构赋值:使用解构赋值 let { dogList, getDog } = useDog(); 获取 useDog hook 中返回的 dogListgetDog 函数。
    • 模板中使用:在模板中,使用 v-for 遍历 dogList 来展示多个狗狗图片,并且通过点击按钮触发 getDog 函数来获取新的狗狗图片,从而更新视图。

综上所述,这个例子展示了 Vue 3.0 中 hooks 的强大功能,通过封装逻辑和数据,提高了代码的可维护性和可复用性,使得组件的开发更加高效和清晰。

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

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

相关文章

学习记录:js算法(七十七):合并若干三元组以形成目标三元组

文章目录 合并若干三元组以形成目标三元组思路一 合并若干三元组以形成目标三元组 三元组 是一个由三个整数组成的数组。给你一个二维整数数组 triplets &#xff0c;其中 triplets[i] [ai, bi, ci] 表示第 i 个 三元组 。同时&#xff0c;给你一个整数数组 target [x, y, z]…

Prompt Engineering (Prompt工程)

2 prompt工程2大原则 2.1 给出清晰&#xff0c;详细的指令 策略1&#xff1a;使用分割符清晰的指示输出的不同部分&#xff0c;比如"",<>,<\tag>等分隔符 策略2&#xff1a;指定一个结构化的输出&#xff0c;比如json,html等格式 策略3&#xff1a;要…

使用openssl生成自签名证书(多域名)用于https的ssl验证

有时在项目的开发环境和测试环境,并不能获得正式的证书,但是项目的开发和测试又需要证书来模拟生产环境下的安全配置,此时就可以采用自签名证书。而且我们希望我们的证书能够在开发环境和测试环境中完全正常的使用,不会出现各种证书无效的提示和警告。此时就可以参考这里的…

Oracle视频基础1.1.2练习

1.1.2 需求&#xff1a; 查询oracle组件和粒度大小&#xff0c; select component,granule_size from v$sga_dynamic_components;Oracle SGA 中组件和粒度大小查询详解 在 Oracle 数据库的内存结构中&#xff0c;SGA&#xff08;System Global Area&#xff0c;系统全局区&am…

基于SSM房屋租赁管理系统的设计与实现

前言 房屋租赁管理系统&#xff0c;不仅可以改善用户线下到租赁公司进行查看房屋类型的局面以及预约信息等&#xff0c;还可以提供管理效率&#xff0c;同时也可以增强网站的竞争力。利用房屋租赁管理系统&#xff0c;可以有效地提高系统的人事的效率和信息化水平&#xff0c;…

Gateway 统一网关

一、初识 Gateway 1. 为什么需要网关 我们所有的服务可以让任何请求访问&#xff0c;但有些业务不是对外公开的&#xff0c;这就需要用网关来统一替我们筛选请求&#xff0c;它就像是房间的一道门&#xff0c;想进入房间就必须经过门。而请求想要访问微服务&#xff0c;就必须…

sa-token 所有的异常都是未登录异常的问题

在使用satoken的时候&#xff0c;有这么一个问题&#xff0c;就是不管我是什么错误&#xff0c;都会弹出未登录异常&#xff0c;起初的时候我以为satoken的拦截器会拦截所有的异常&#xff0c;但是今后测试才发现忽略了一点&#xff0c;也是最重要最容易忽视的一点。 如果我现在…

解决JeecgBoot微服务通过Gateway访问Swagger资源出现“Knife4j文档请求异常”

1.问题描述 基于jeecgboot单体版本,参照官方推荐的纯微服务项目拆分指南,对jeecgboot项目进行微服务拆分,将gateway和system模块启动成功后,通过gateway访问访问Swagger接口文档,出现“Knife4j文档请求异常”,如下图: 2.问题定位: 1.浏览器F12打开控制台,查看异常请…

【React】React 18:新特性与重大更新解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 React 18&#xff1a;新特性与重大更新解析并发渲染什么是并发渲染&#xff1f;…

Linux系统下串口AT指令控制EC20连接华为云物联网平台

一、前言 在当今万物互联的时代背景下&#xff0c;物联网技术的快速发展极大地推动了智能化社会的构建。作为其中的关键一环&#xff0c;设备与云端平台之间的通信变得尤为重要。本文介绍如何在Linux操作系统环境下&#xff0c;利用串口通信来实现EC20模块与华为云物联网平台的…

【JavaEE】【多线程】线程池

目录 一、线程池二、ThreadPoolExecutor类讲解2.1 构造方法2.1.1 corePoolSize和maximumPoolSize2.1.2 KeepAliveTime和unit2.1.3 workeQueue2.1.4 threadFactory2.1.5 handler 三、简易构造线程池四、自己实现一个简单线程池 一、线程池 线程池&#xff1a;线程池可以简单理解…

R语言笔记(二):向量

文章目录 一、Data structure: vectors二、Indexing vectors三、Re-assign values to vector elements四、Generic function for vectors五、Vector of random samples from a distribution六、Vector arithmetic七、Recycling八、Element-wise comparisons of vectors九、Comp…

Vue.js 学习总结(11)—— Vue3 Hook 函数实战总结

前言 在 Vue 3 中&#xff0c;Hook 函数是一种特殊的函数&#xff0c;用于封装可重用的逻辑和状态管理。Hook 函数允许你在 Vue 组件中提取和复用逻辑&#xff0c;而不是将所有逻辑都放在组件的选项对象中。它们可以帮助你更好地组织代码&#xff0c;提高代码的可维护性和可测…

Elasticsearch 解析:倒排索引机制/字段类型/语法/常见问题

Elasticsearch 是一个分布式的开源搜索引擎&#xff0c;广泛用于全文搜索、分析和数据存储。它基于 Apache Lucene 构建&#xff0c;支持 RESTful 风格的 API&#xff0c;使得开发者能够高效地存储和检索数据。本文将详细讲解 Elasticsearch 的基本原理&#xff0c;特别是其倒排…

网页上的视频怎么下载下来?三种方法

分享三个简单好用的网页视频下载工具&#xff0c;值得使用&#xff01; 1.IDM IDM 是一款可以提高下载速度达5倍的工具&#xff0c;同时具有恢复、调度和组织下载的功能。如果由于网络问题或意外的电源中断&#xff0c;程序将恢复未完成的下载。 IDM 还具有一个完全功能的站点…

第十四课 Vue中的HTML及文本渲染

Vue中的HTML及文本渲染 HTML渲染 v-html指令可以在DOM中渲染新的子HTML DOM&#xff0c;Vue官方认为HTML渲染是不安全的&#xff0c;并不建议直接做HTML插入操作。 <div id"app"><div v-html"vals"></div></div><script>n…

软考架构师论文范文(游戏后端)

摘要 2022年1月&#xff0c;笔者参与了公司“Gossip”MMORPG游戏的后端开发项目&#xff0c;并担任系统架构师职务&#xff0c;负责系统的架构设计。该游戏是一款2.5D的大型多人在线角色扮演游戏&#xff0c;旨在为玩家提供一个沉浸式的幻想世界。本文以“Gossip”为例&#x…

【Flask】一、安装与第一个测试程序

目录 Flask简介 安装Flask 安装pip&#xff08;Python包管理器&#xff09; 使用pip安装Flask 验证安装 创建Flask程序 创建应用 运行 访问测试 Flask简介 Flask是一个用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展&#xff0c;使其成为构建简单网站或复…

【经典论文阅读11】ESMM模型——基于贝叶斯公式的CVR预估

传统的CVR模型&#xff08;也就是直接对conversion rate建模的模型&#xff09;在实际应用中面临两个问题&#xff08;样本选择偏差与数据稀疏性问题&#xff09;。为了解决这两个问题&#xff0c;本文提出ESMM模型。该模型巧妙地利用用户行为序列去建模这个问题&#xff0c;从…

从零开始的LeetCode刷题日记:55. 跳跃游戏

一.相关链接 题目链接&#xff1a;55. 跳跃游戏 二.心得体会 这一道贪心算法的题目的核心其实是要知道每一个点可以跳到哪些位置。最好想到的一个贪心思路是每次都跳最大的&#xff0c;但也很容易找到反例。 这道题的核心是一个概念&#xff1a;覆盖范围&#xff01;覆盖范…