当前位置: 代码网 > it编程>编程语言>Javascript > 使用Vue3和Pinia实现网页刷新功能

使用Vue3和Pinia实现网页刷新功能

2024年09月05日 Javascript 我要评论
概述在现代web开发中,保持用户界面的动态性和响应性至关重要。当用户触发某些操作时,例如点击按钮或者完成表单提交,我们往往需要刷新页面的一部分来展示最新的数据。本文将介绍如何使用 vue 3 和 pi

概述

在现代 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>
  1. 导入依赖

    • 导入 watchref, 和 nexttick 函数,这些是 vue 3 的 composition api 中的核心函数。
    • 导入 uselayoutsettingstore,这是来自 @/store/modules/setting 的 pinia 存储模块。
  2. 创建响应式引用

    • let flag = ref(true); 创建一个响应式的布尔值 flag,初始值为 true
  3. 监听数据变化

    • 使用 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网页刷新的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com