概述
在现代 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,我们可以轻松地实现网页的局部刷新功能。这种方法不仅可以提高用户体验,还可以使应用程序更加灵活和高效。
以上就是使用vue3和pinia实现网页刷新功能的详细内容,更多关于vue3 pinia网页刷新的资料请关注代码网其它相关文章!
发表评论