当前位置: 首页 > news >正文

vue-query的使用

 vue-query,类似于vuex/pinia,以缓存为目的,但侧重的是对网络请求的缓存。
这是我预想的使用场景:假设在各个页面都需要发起相同的请求,去获取数据,而这种数据在一定时间内不会发生变化,那么这种请求数据是可以被缓存下来的。

pinia用于处理公共状态,vue-query用于处理服务端状态,准确的说是把原本需要在pinia中处理的服务端状态迁移到vue-query中。

本实例使用的vue版本是3.3.0

vue-query

github地址:DamianOsipiuk/vue-query: Hooks for fetching, caching and updating asynchronous data in Vue (github.com)

1、安装vue-query

npm i vue-query 

2、在入口文件中引入

import { VueQueryPlugin } from 'vue-query'
import { createApp } from 'vue'import router from './router'import App from './App.vue'
const app = createApp(App)
app.use(router)
app.use(VueQueryPlugin);app.mount('#app')

3、使用

index.vue

<template><div>
首页
{{ isLoading }}
<showList/>
<button @click="goAbout">去about页面</button></div>
</template><script setup lang="ts">
import {ref} from 'vue'
import ajax from '@/common/ajax'
import {useQuery} from 'vue-query';
import {useRouter} from 'vue-router'
import showList from '@/components/showList.vue';
const router = useRouter();
const getData = ()=>{
//这里使用的是node写的接口服务,自行替换自己的接口return ajax('/live/api/packages/list');
}
const goAbout = ()=>{router.push('/about')
}
const {data,isLoading} = useQuery(["listData"], ()=>getData());</script><style scoped></style>

components/showList.vue

<template><div><h2>列表组件</h2><ul><li v-for="packages in packageList" :key="packages._id">{{ packages.name }}</li></ul></div>
</template><script setup lang="ts">
import { computed } from 'vue'
import { useQuery } from 'vue-query';const {data} = useQuery(["listData"]);const packageList = computed(() => data.value?.data.data.list);</script><style scoped></style>

效果展示

可以看到组使用 listData的缓存数据

接下来在首页跳转到about页面,在about页面也使用这份缓存数据

about.vue

<template><div><h2>About页面使用缓存数据</h2><ul><li v-for="packages in packageList" :key="packages._id">{{ packages.name }}</li></ul></div>
</template><script setup lang="ts">
import { computed } from 'vue'import { useQuery } from 'vue-query';
const { data } = useQuery(["listData"]);const packageList = computed(() => data.value?.data.data.list);</script><style scoped></style>

效果展示

 跳转到about页面,是没有重新发送请求的,使用的是之前的缓存数据

但是发现在页面重新获取焦点和切换路由后,会重新发送请求,看文档说以下添加配置,但是发现不起效

const {data,isLoading} = useQuery(["listData"], ()=>getData(),{cacheTime: Infinity,staleTime: Infinity,
});

 

vue-query

@tanstack/vue-query

@tanstack/vue-query可以说是vue-query的强化版本,TanStack Query 是一个开源、功能齐全、支持 TypeScript 的库,非常适合用于处理客户端状态,处理异步或服务器状态。它支持React,Vue,Svelte,Solid框架,大多时候我们都会我们使用的框架把它叫做vue-query或者react-query。

特点

  • 非常好用的query库,目的是为了缓存后端api的结果,不用像以前一样,手动将结果一个一个存储到store,并且提供了一些非常好用的hook方法
  • 非常适合用于处理客户端状态,处理异步或服务器状态
  • 默认支持异步
  • 它并不是用于替代axios等请求库,而只是作为外层的封装,方便控制请求与结果

安装:

npm i @tanstack/vue-query

 在入口文件注册

import { VueQueryPlugin } from '@tanstack/vue-query'
app.use(VueQueryPlugin);

复用上面的代码,只需要将vue-query改为@tanstack/vue-query

index.vue

<template><div>首页{{ isLoading }}<!-- {{ data }} --><!-- {{ datas }} --><showList /><button @click="goAbout">去about页面</button></div>
</template><script setup lang="ts">import ajax from '@/common/ajax'
import { useQuery } from '@tanstack/vue-query';import { useRouter } from 'vue-router'
import showList from '@/components/showList.vue';
const router = useRouter();const getData = () => {return ajax('/live/api/packages/list');
}const goAbout = () => {router.push('/about')
}const { data, isLoading } = useQuery({queryKey: ['listData'],queryFn: () => getData(),});</script><style scoped></style>

components/showList.vue

<template><div><h2>列表组件</h2><ul><li v-for="packages in packageList" :key="packages._id">{{ packages.name }}</li></ul></div>
</template><script setup lang="ts">
import { computed } from 'vue'
import {useQuery} from '@tanstack/vue-query';const { data } = useQuery({queryKey: ['listData']
});const packageList = computed(() => data.value?.data.data.list);</script><style scoped></style>

about.vue

<template><div><h2>About页面使用缓存数据</h2><ul><li v-for="packages in packageList" :key="packages._id">{{ packages.name }}</li></ul></div>
</template><script setup lang="ts">
import { computed } from 'vue'import { useQuery } from '@tanstack/vue-query';
const { data } = useQuery({queryKey:["listData"]
});const packageList = computed(() => data.value?.data.data.list);</script><style scoped></style>

设置refetchInterval,在规定间隔中重新发送请求

const { data, isLoading } = useQuery({queryKey: ['listData'],queryFn: () => getData(),refetchInterval: 12000
});

可以看到network会重新发送请求

@tanstack/vue-query

总结

vue-query 只适用于存储从服务端获取的数据,如果有另外的数据需要存储还是要用到 pinia,但是这种数据是比较少的,这样也可以使得 pinia 中的代码量减少很多并简洁。当然这里介绍的 vue-query 的 api 是最简单的,你能想到的功能它基本都有,感兴趣的可以查看文档。

相关文章:

vue-query的使用

vue-query&#xff0c;类似于vuex/pinia&#xff0c;以缓存为目的&#xff0c;但侧重的是对网络请求的缓存。 这是我预想的使用场景&#xff1a;假设在各个页面都需要发起相同的请求&#xff0c;去获取数据&#xff0c;而这种数据在一定时间内不会发生变化&#xff0c;那么这种…...

git本地搭建服务器[Vmware虚拟机访问window的git服务器]

先按照https://zhuanlan.zhihu.com/p/494988089说明下载好Gitblit然后复制到tomcat的webapps目录下,如下: 双击"startup.bat"启动tomcat: 然后访问"http://127.0.0.1:8080/gitblit/"即可看到git的界面: 说明git服务器已经能够成功运行了! Vmware虚拟机…...

【Python】基础练习题

1&#xff09;从random库中选取相应的函数&#xff0c;用蒙特卡罗方法&#xff08;统计实验方法&#xff09;求解pi。 import randomdef estimate_pi(num_experiments):num_points_in_circle 0num_total_points 0for _ in range(num_experiments):x random.uniform(-1, 1)y…...

语雀故障与反思,顺便再领半年会员!

23 日语雀的故障相信大部分人都已经知道了&#xff0c;官方发布的公告是这样的&#xff1a; 10 月 23 日语雀出现重大服务故障&#xff0c;且持续 7 个多小时才完全恢复&#xff0c;给用户使用造成极大不便&#xff0c;对此我们深感抱歉。经过复盘&#xff0c;我们在这里向大家…...

PYTHON利用SQLAlchemy库高效操作关联的数据表

SQLAlchemy是一个Python库&#xff0c;用于处理关系型数据库的ORM&#xff08;对象关系映射&#xff09;和SQL表达式的生成。它提供了许多功能&#xff0c;包括&#xff1a; ORM&#xff08;对象关系映射&#xff09;&#xff1a;允许将数据库表映射到Python对象&#xff0c;使…...

TypeScript中的类型工具

类型工具 是ts提供的一些内置的工具&#xff0c;用来更方便地处理各种类型&#xff0c;以及生成新的类型&#xff0c;可以直接使用。也就是对类型的操作。 1. 字符串类型工具 ts 内置了四个字符串类型工具&#xff0c;专门用来操作字符串类型。这四个工具类型都定义在 ts 自…...

File --JAVA

File --JAVA 构造方法 方法说明public File (String pathname)根据文件路径创建对象public File (String parent, String child)根据父路径名字字符串和子路径名字符串创建文件对象public File (String parent, String child)根据父路径对应文件对象和子路径名字符串创建文件…...

比较Excel中的两列目录编号是否一致

使用java代码比较excel中两列是否有包含关系&#xff0c;若有包含关系&#xff0c;核对编号是否一致。 excel数据样例如下&#xff1a; package com.itownet.hg;import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import j…...

pgsql 创建自增ID , 指定自增ID起始值

1. 创建序列&#xff1a; CREATE SEQUENCE table_name_id_seq; 2. 将序列与表的列关联&#xff1a; ALTER TABLE table_name ALTER COLUMN id SET DEFAULT nextval(table_name_id_seq);3. 设置序列的起始值、递增步长和最大值 // 将序列的起始值设置为 1 ALTER SEQUENCE ta…...

数据安全的重要性:如何解密[thekeyishere@cock.li].Elbie勒索病毒

尊敬的读者&#xff1a; 随着数字时代的来临&#xff0c;网络威胁也不断进化&#xff0c;而[datastorecyberfear.com].Elbie勒索病毒是其中的一个引人注目的例子。这个恶意软件采用高度精密的方法&#xff0c;将用户的数据文件锁定&#xff0c;并要求支付赎金以获取解锁密钥。…...

图像识别在自动驾驶汽车中的决策规划与控制策略研究。

图像识别在自动驾驶汽车中的决策规划与控制策略研究 随着自动驾驶技术的不断发展&#xff0c;图像识别已经成为实现自动驾驶的关键技术之一。在自动驾驶汽车中&#xff0c;图像识别技术主要用于环境感知、决策规划和控制系统。本文将重点探讨图像识别在自动驾驶汽车中的决策规…...

Spring MVC 的责任链模式

Spring MVC 框架使用了责任链模式来处理HTTP请求的流程。这个责任链模式主要包括多个拦截器&#xff08;Interceptor&#xff09;以及处理器&#xff08;Handler&#xff09;&#xff0c;它们协同工作以完成请求的处理和响应。以下是Spring MVC的责任链模式的工作原理和流程图&…...

提升用户体验的关键步骤

快速搭建功能齐全的户外帐篷用具小程序&#xff0c;是现今越来越流行的一种商业模式。通过将线下的户外用品店转移到线上&#xff0c;不仅可以减少人力成本和租金等固定支出&#xff0c;还可以为用户提供更便捷的购物体验。因此&#xff0c;学习如何快速搭建一个功能齐全的户外…...

本地模拟,服务器下载文件

题目要求&#xff1a; 编写客户端程序和服务器端程序客户端可以输入一个音乐 文件名&#xff0c;比如 美丽中国&#xff0c;服务端 收到音乐后&#xff0c;可以给客户端返回这个音乐文件&#xff0c;如果服务器没有这个文件&#xff0c;返回一个默认的音乐即可客户端收到文件后…...

如何防止Shopee账户关联

在当今数字时代&#xff0c;隐私和安全问题变得日益重要。作为一家受欢迎的在线购物平台&#xff0c;Shopee卖家也面临着多账号关联的风险。本文将如何具保护Shopee免受关联。 一、MuLogin防关联指纹浏览器简介 MuLogin是一款专为隐私保护而设计的指纹浏览器&#xff0c;旨在保…...

Java 入门指南:使用 Docker 创建容器化 Spring Boot 应用程序

文章目录 步骤 1: 准备工作步骤 2: 克隆 Spring Boot 应用程序步骤 3: 创建 Dockerfile步骤 4: 构建 Docker 映像步骤 5: 运行容器步骤 6: 链接到本地数据库步骤 7: 使用 Docker Compose 运行多个容器步骤 8: 设置 CI/CD 管道结论 &#x1f388;个人主页&#xff1a;程序员 小侯…...

Leetcode 542. 01 矩阵

542. 01 矩阵-中等 问题描述 给定一个由 0 和 1 组成的矩阵 mat &#xff0c;请输出一个大小相同的矩阵&#xff0c;其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1&#xff1a; 输入&#xff1a;mat [[0,0,0],[0,1,0],[0…...

分享一下微信小程序抽奖链接怎么做

标题&#xff1a;微信小程序抽奖链接制作全攻略&#xff0c;轻松玩转营销抽奖活动 一、引言 在当今的数字化时代&#xff0c;抽奖活动已经成为一种高效的市场营销策略&#xff0c;而微信小程序作为一个功能强大的移动端平台&#xff0c;为企业和个人提供了制作抽奖链接的便捷…...

MathType2024破解版激活序列号

MathType序列号是一款针对该软件而制作的激活工具&#xff0c;大家都知道这款软件在官方是需要花钱购买的&#xff0c;不然得话就只能试用。有很多功能都无法正常使用&#xff01;而本序列号却可以完美的解决这一难题&#xff0c;因为它可以破解并激活“MathType”&#xff0c;…...

简述对 Spring MVC 的理解

SpringMVC 是一种基于 Java 语言开发&#xff0c;实现了 Web MVC 设计模式&#xff0c;请求驱动类型的轻量级 Web 框架。 Spring MVC组件 MVC 架构模式的思想&#xff0c;通过把 Model&#xff0c;View&#xff0c;Controller 分离&#xff0c;将 Web 层进行职责解耦&#xff0…...

GAMES101图形学笔记:从光栅化到路径追踪,我的自学避坑路线图

GAMES101图形学自学指南&#xff1a;从光栅化到路径追踪的实战路线 在B站上拥有数百万播放量的GAMES101课程&#xff0c;已经成为计算机图形学爱好者入门的黄金标准。作为一门融合数学、物理和编程的交叉学科&#xff0c;图形学的学习曲线往往令人望而生畏。本文将分享我自学G…...

AI数字人驱动的矩阵内容生产:2026年技术架构与人效革命

一、背景&#xff1a;为什么2026年矩阵团队开始淘汰真人出镜&#xff1f;2024年之前&#xff0c;短视频矩阵的内容生产模式是这样的&#xff1a;环节传统方式瓶颈写脚本编剧手写1人1天最多写5条拍视频真人出镜拍摄1人1天最多拍3条剪辑剪辑师手动剪1人1天最多剪8条配音真人录音/…...

HarmonyOS ArkWeb 系列之从框架层锁死复制权限:copyOptions 详解

文章目录copyOptions 是什么完整代码示例HTML 页面&#xff08;用于测试&#xff09;三种模式的实际表现和 H5 层 user-select 的区别实际业务场景踩坑记录写在最后上两篇讲的都是 H5 层面的剪贴板操作。但有些场景下&#xff0c;你需要的不是"监听"或"修改&quo…...

实用指南:3分钟在Windows中解锁iPhone HEIC照片缩略图预览

实用指南&#xff1a;3分钟在Windows中解锁iPhone HEIC照片缩略图预览 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 还在为iPh…...

RK3588核心板硬件设计与系统开发全攻略:从接口解析到AI部署

1. 项目概述&#xff1a;为什么是PET_RK3588_CORE&#xff1f;在嵌入式开发和边缘计算领域&#xff0c;选对核心板&#xff0c;项目就成功了一半。今天要聊的这块PET_RK3588_CORE&#xff0c;是我最近深度折腾的一块板子&#xff0c;它基于瑞芯微的RK3588这颗“明星”SoC。如果…...

基于CircuitPython与RP2040打造可编程USB脚踏开关:从硬件到软件的完整指南

1. 项目概述&#xff1a;为什么你需要一个可编程的脚踏开关&#xff1f; 在剪辑视频、处理音频、写代码或者玩游戏的时候&#xff0c;你的双手是不是永远不够用&#xff1f;频繁地在键盘、鼠标、调音台或者剪辑软件的面板之间切换&#xff0c;不仅效率低下&#xff0c;还容易打…...

转行对谈:转向AI是破茧成蝶还是折翼未来?

01前言&#xff5c;AI时代下的土建人 一、AI浪潮&#xff1a;开启一个崭新的时代 人工智能&#xff08;AI&#xff09;已经从学术前沿走向产业中心&#xff0c;成为当前时代最具颠覆性的技术之一。从最早“出圈”的对话式模型ChatGPT的火爆到AI绘画、AI写作等AIGC&#xff08;生…...

当你的BERT模型被‘下毒’了怎么办?聊聊NLP后门攻击的实战检测与防御(附ONION、T-Miner工具实操)

当BERT模型遭遇后门攻击&#xff1a;一线工程师的检测与防御实战指南 在部署基于BERT的文本分类服务时&#xff0c;许多团队会忽略一个潜在威胁——模型可能已在训练阶段被植入后门。这类攻击极其隐蔽&#xff1a;模型对正常输入表现完美&#xff0c;但当遇到特定触发词&#x…...

Perplexity图标搜索效率提升300%:从零配置到精准获取的5步实战工作流

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity图标资源搜索 在构建与 Perplexity AI 集成的前端应用或开发调试工具时&#xff0c;获取其官方图标资源是品牌一致性与用户体验的关键环节。Perplexity 官方未提供公开的图标下载中心&#xff0c;但…...

用STM32和HC-SR04做个智能小车避障,代码和接线图都给你准备好了

STM32与HC-SR04构建智能小车避障系统实战指南 1. 项目概述与核心组件选型 智能小车避障系统是嵌入式开发中极具实用价值的练手项目&#xff0c;它能综合考察开发者对传感器数据采集、电机控制和简单算法的掌握程度。这个项目的核心在于如何让小车自主感知环境并做出避障决策&…...