Vue 3 + Pinia 实现网页刷新功能
概述
在现代 Web 开发中,保持用户界面的动态性和响应性至关重要。当用户触发某些操作时,例如点击按钮或者完成表单提交,我们往往需要刷新页面的一部分来展示最新的数据。本文将介绍如何使用 Vue 3 和 Pinia 来实现这一功能。
技术栈
- Vue 3
- Pinia (状态管理)
目标
实现一个简单的网页刷新功能,当用户点击刷新按钮时,页面中的某个部分会重新加载以展示最新数据。
步骤
1. 创建项目
假设你已经安装了 Node.js 和 Vue CLI,可以使用 Vue CLI 创建一个新的 Vue 3 项目:
vue create my-refresh-app
cd my-refresh-app
npm install pinia @vue/router
2. 安装依赖
安装 Pinia 和 Vue Router,因为我们会使用 Pinia 来管理状态,并使用 Vue Router 来处理页面的导航。
3. 配置 Pinia
创建一个 Pinia 的状态管理仓库来管理布局组件的配置,比如是否显示刷新效果。
具体代码如下:
import { defineStore } from 'pinia'const useLayoutSettingStore = defineStore('SettingStore', {state: () => {return {fold: false, // 是否折叠侧边栏refresh: false // 刷新效果}},actions: {toggleRefresh() {this.refresh = !this.refresh;}}
})export default useLayoutSettingStore;
这里添加了一个 toggleRefresh
action 来切换 refresh
的状态。
4. 设置 顶部刷新组件
现在我们需要在组件中使用这个仓库,并且添加一个按钮来触发刷新。
具体代码
<template><el-button size="default" circle="false" @click="updateRefresh"><el-icon><Refresh></Refresh></el-icon></el-button><el-button size="default" circle="false"><el-icon><FullScreen></FullScreen></el-icon></el-button><el-button size="default" circle="false"><el-icon><Setting></Setting></el-icon></el-button><img src="@/../public/favicon.ico" style="margin: 0 12px"><el-dropdown :hide-on-click="false"><span class="el-dropdown-link">admin<el-icon class="el-icon--right"><arrow-down /></el-icon></span><template #dropdown><el-dropdown-menu><el-dropdown-item>退出登录</el-dropdown-item></el-dropdown-menu></template></el-dropdown>
</template><script setup lang="ts" name="setting">
// 获取一下 配置
import useLayOutSettingStore from '@/store/modules/setting';
let layoutSettingStore = useLayOutSettingStore();// 刷新按钮点击事件
const updateRefresh = () => {layoutSettingStore.refresh = !layoutSettingStore.refresh;
}
</script><style scoped></style>
这里我们添加了一个 beforeEach
路由守卫来检查是否需要刷新当前路由。
5. 刷新的主页面
这段代码定义了一个 Vue 3 组件,该组件主要用于处理路由组件的过渡效果,并且具备一个刷新功能,用 v-if 来销毁路由组件的入口。
<template><!-- 路由组件出口位置 --><router-view v-slot="{ Component }"><transition name="fade"><component :is="Component" v-if="flag" /></transition></router-view>
</template><script setup lang="ts" nam="main">
import { watch, ref, nextTick } from 'vue';
import useLayOutSettingStore from '@/store/modules/setting';
let layoutSettingStore = useLayOutSettingStore();// 控制当前组件是否销毁重建
let flag = ref(true);// 监听仓库内部的数据是否发生变化,如果反生变化,说明用户点击过刷新按钮
watch(() => layoutSettingStore.refresh, () => {// 点击刷新按钮: 路由组件需要销毁flag.value = false;nextTick(() => {flag.value = true;})
})
</script><style scoped>
.fade-enter-from {opacity: 0;transform: rotate(0deg)
}.fade-enter-active {transition: all 1s;
}.fade-enter-to {opacity: 1;transform: rotate(360deg);
}
</style>
-
导入依赖:
- 导入
watch
,ref
, 和nextTick
函数,这些是 Vue 3 的 Composition API 中的核心函数。 - 导入
useLayOutSettingStore
,这是来自@/store/modules/setting
的 Pinia 存储模块。
- 导入
-
创建响应式引用:
let flag = ref(true);
创建一个响应式的布尔值flag
,初始值为true
。
-
监听数据变化:
- 使用
watch
函数监听layoutSettingStore.refresh
的变化。 - 当
refresh
发生变化时,先将flag
设置为false
,这会导致<component>
被隐藏,从而触发组件的销毁。 - 使用
nextTick
确保 DOM 更新后,再将flag
设置回true
,从而重新显示组件。
- 使用
6. 测试
启动应用并测试刷新功能:
npm run serve
打开浏览器,访问 http://localhost:8080
,点击“刷新”按钮,查看页面是否正确刷新。
结论
通过使用 Vue 3 和 Pinia,我们可以轻松地实现网页的局部刷新功能。这种方法不仅可以提高用户体验,还可以使应用程序更加灵活和高效。
相关文章:
Vue 3 + Pinia 实现网页刷新功能
概述 在现代 Web 开发中,保持用户界面的动态性和响应性至关重要。当用户触发某些操作时,例如点击按钮或者完成表单提交,我们往往需要刷新页面的一部分来展示最新的数据。本文将介绍如何使用 Vue 3 和 Pinia 来实现这一功能。 技术栈 Vue 3…...

DVWA综合靶场漏洞讲解
目录 综合靶场漏洞讲解 Brute Force Low Medium High Command Injection Low Medium High File Inclusion Low,Medium,High File Upload Low Medium High SQL Injection Low Medium High SQL Injection (Blind) Low Medium High XSS(DOM&am…...

实现Bezier样条曲线
1.给出n1 个控制点pk(xk,yk,zk),这里k可取值0-n,多项式函数公式如下 获取的单个点的代码 void zmBezier::getPoint(float u, double p[3]) {int n m_count - 1;double x 0, y 0, z 0;for(int k 0; k < n; k){x m_ctrlPoints[k][0] * BEZ_k_n(n, k, u);y m_ctrlPoin…...

MySQL中的EXPLAIN的详解
一、介绍 官网介绍: https://dev.mysql.com/doc/refman/5.7/en/explain-output.htmlhttps://dev.mysql.com/doc/refman/8.0/en/explain-output.htmlexplain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句ÿ…...

LearnOpenGL——SSAO学习笔记
LearnOpenGL——SSAO学习笔记 SSAO一、基本概念二、样本缓冲三、法向半球四、随机核心转动五、SSAO着色器六、环境遮蔽模糊七、应用SSAO遮蔽因子 SSAO 一、基本概念 环境光照是我们加入场景总体光照中的一个固定光照常量,它被用来模拟光的散射(Scattering)。散射应…...

[C语言]-基础知识点梳理-文件管理
前言 各位师傅们好,我是qmx_07,今天给大家讲解文件管理的相关知识,也就是常见的 读取,删除一类的操作 文件 为什么要使用文件? 程序的数据是存储在电脑的内存中,如果程序退出,内存回收&…...

pcdn闲置带宽被动收入必看教程。第五讲:光猫更换和基础设置
PCDN闲置带宽被动收入必看教程 —— 第五讲:光猫更换和基础设置 为了从闲置带宽中获得被动收入,高效的网络设备至关重要。运营商提供的光猫通常能满足日常家用需求,但对于PCDN应用来说,它们可能不足以提供所需的高性能和稳定性。…...

工业数据采集网关简介-天拓四方
随着工业4.0和物联网(IoT)技术的深入发展,工业数据采集网关作为连接现场设备与上层管理系统的关键节点,其在智能工厂中的作用愈发凸显。本文将深入探讨工业数据采集网关的功能、特点、应用场景及其实操性,以期为读者提…...

Java 调整字符串,验证码生成
package text7;public class ZiFanz {public static void main(String[] args) {//1.定义两个字符串String strA "abcde";String strB "deabc";//2.abcde->bcdea->cdeab->deabc旋转字符串//旋转并比较boolean result cheak(strA, strB);System…...

【专题】全球商用服务机器人市场研究(2023)报告合集PDF分享(附原数据表)
原文链接:https://tecdat.cn/?p37366 近年来,随着人工智能、物联网和自动化技术的不断进步,商用服务机器人行业迅速崛起,展现出广阔的发展前景。从最初的实验室研发到如今的规模化应用,商用服务机器人已逐渐成为各行…...

SQL UA注入 (injection 第十八关)
简介 SQL注入(SQL Injection)是一种常见的网络攻击方式,通过向SQL查询中插入恶意的SQL代码,攻击者可以操控数据库,SQL注入是一种代码注入攻击,其中攻击者将恶意的SQL代码插入到应用程序的输入字段中&a…...

初阶数据结构之计数排序
非比较排序 计数排序 计数排序⼜称为鸽巢原理,是对哈希直接定址法的变形应⽤。 操作步骤: 1)统计相同元素出现次数 2)根据统计的结果将序列回收到原来的序列中 #include "CountSort.h" void Count(int* arr, int n)…...

【开端】记一次诡异的接口排查过程
一、绪论 最近碰到这么一个情况,接口请求超时。前提是两台服务器间的网络是畅通的,端口也是通,应用代码也是通。意思是在应用上,接口没有任何报错,能正常返回数据。客户端到服务端接口也能通,但是接收不到服…...

jenkins最佳实践(二):Pipeline流水线部署springCloud微服务项目
各位小伙伴们大家好呀,我是小金,本篇文章我们将介绍如何使用Pipeline流水线部署我们自己的微服务项目,之前没怎么搞过部署相关的,以至于构建流水线的过程中中也遇到了很多自己以前没有考虑过的问题,特写此篇࿰…...

第2章 C语言基础知识
第2章 C语言基础知识 1.printf()函数 在控制台输出数据,需要使用输出函数,C语言常用的输出函数为printf()。 printf()函数为格式化输出函数,其功能是按照用户指定的格式将数据输出到屏幕上。 printf(“格式控制字符串”,[输出列表]); 格式控…...

鹭鹰优化算法SBOA优化RBF神经网络的扩散速度实现多数入多输出数据预测,可以更改数据集(MATLAB代码)
一、鹭鹰优化算法介绍 鹭鹰优化算法(Secretary Bird Optimization Algorithm, SBOA)是一种新型的元启发式算法,它于2024年4月由Youfa Fu等人提出,并发表在SCI人工智能二区顶刊《Artificial Intelligence Review》上。该算法的灵感…...

MySQL基础练习题48-连续出现的数字
目录 题目 准备数据 分析数据 题目 找出所有至少连续出现三次的数字。 准备数据 ## 创建库 create database db; use db;## 创建表 Create table If Not Exists Logs (id int, num int)## 向表中插入数据 Truncate table Logs insert into Logs (id, num) values (1, 1) i…...

webrtc学习笔记2
音视频采集和播放 打开摄像头并将画面显示到页面 1. 初始化button、video控件 2. 绑定“打开摄像头”响应事件onOpenCamera 3. 如果要打开摄像头则点击 “打开摄像头”按钮,以触发onOpenCamera事件的调用 4. 当触发onOpenCamera调用时 a. 设置约束条件,…...

Simple RPC - 06 从零开始设计一个服务端(上)_注册中心的实现
文章目录 Pre核心内容服务端结构概述注册中心的实现1. 注册中心的架构2. 面向接口编程的设计3. 注册中心的接口设计4. SPI机制的应用 小结 Pre Simple RPC - 01 框架原理及总体架构初探 Simple RPC - 02 通用高性能序列化和反序列化设计与实现 Simple RPC - 03 借助Netty实现…...
【深度学习】基于Transformers的大模型推理框架
本文旨在介绍基于transformers的decoder-only语言模型的推理框架。与开源推理框架不同的是: 本框架没有利用额外的开源推理仓库,仅基于huggingface,transformers,pytorch等原生工具进行推理,适合新手学习大模型推理流…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...