使用Vue3和Pinia實(shí)現(xiàn)網(wǎng)頁刷新功能
概述
在現(xiàn)代 Web 開發(fā)中,保持用戶界面的動態(tài)性和響應(yīng)性至關(guān)重要。當(dāng)用戶觸發(fā)某些操作時(shí),例如點(diǎn)擊按鈕或者完成表單提交,我們往往需要刷新頁面的一部分來展示最新的數(shù)據(jù)。本文將介紹如何使用 Vue 3 和 Pinia 來實(shí)現(xiàn)這一功能。
技術(shù)棧
- Vue 3
- Pinia (狀態(tài)管理)
目標(biāo)
實(shí)現(xiàn)一個(gè)簡單的網(wǎng)頁刷新功能,當(dāng)用戶點(diǎn)擊刷新按鈕時(shí),頁面中的某個(gè)部分會重新加載以展示最新數(shù)據(jù)。
步驟
1. 創(chuàng)建項(xiàng)目
假設(shè)你已經(jīng)安裝了 Node.js 和 Vue CLI,可以使用 Vue CLI 創(chuàng)建一個(gè)新的 Vue 3 項(xiàng)目:
vue create my-refresh-app cd my-refresh-app npm install pinia @vue/router
2. 安裝依賴
安裝 Pinia 和 Vue Router,因?yàn)槲覀儠褂?Pinia 來管理狀態(tài),并使用 Vue Router 來處理頁面的導(dǎo)航。
3. 配置 Pinia
創(chuàng)建一個(gè) Pinia 的狀態(tài)管理倉庫來管理布局組件的配置,比如是否顯示刷新效果。
具體代碼如下:
import { defineStore } from 'pinia' const useLayoutSettingStore = defineStore('SettingStore', { state: () => { return { fold: false, // 是否折疊側(cè)邊欄 refresh: false // 刷新效果 } }, actions: { toggleRefresh() { this.refresh = !this.refresh; } } }) export default useLayoutSettingStore;
這里添加了一個(gè) toggleRefresh
action 來切換 refresh
的狀態(tài)。
4. 設(shè)置 頂部刷新組件
現(xiàn)在我們需要在組件中使用這個(gè)倉庫,并且添加一個(gè)按鈕來觸發(fā)刷新。
具體代碼
<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(); // 刷新按鈕點(diǎn)擊事件 const updateRefresh = () => { layoutSettingStore.refresh = !layoutSettingStore.refresh; } </script> <style scoped></style>
這里我們添加了一個(gè) beforeEach
路由守衛(wèi)來檢查是否需要刷新當(dāng)前路由。
5. 刷新的主頁面
這段代碼定義了一個(gè) Vue 3 組件,該組件主要用于處理路由組件的過渡效果,并且具備一個(gè)刷新功能,用 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(); // 控制當(dāng)前組件是否銷毀重建 let flag = ref(true); // 監(jiān)聽倉庫內(nèi)部的數(shù)據(jù)是否發(fā)生變化,如果反生變化,說明用戶點(diǎn)擊過刷新按鈕 watch(() => layoutSettingStore.refresh, () => { // 點(diǎn)擊刷新按鈕: 路由組件需要銷毀 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>
導(dǎo)入依賴:
- 導(dǎo)入
watch
,ref
, 和nextTick
函數(shù),這些是 Vue 3 的 Composition API 中的核心函數(shù)。 - 導(dǎo)入
useLayOutSettingStore
,這是來自@/store/modules/setting
的 Pinia 存儲模塊。
- 導(dǎo)入
創(chuàng)建響應(yīng)式引用:
let flag = ref(true);
創(chuàng)建一個(gè)響應(yīng)式的布爾值flag
,初始值為true
。
監(jiān)聽數(shù)據(jù)變化:
- 使用
watch
函數(shù)監(jiān)聽layoutSettingStore.refresh
的變化。 - 當(dāng)
refresh
發(fā)生變化時(shí),先將flag
設(shè)置為false
,這會導(dǎo)致<component>
被隱藏,從而觸發(fā)組件的銷毀。 - 使用
nextTick
確保 DOM 更新后,再將flag
設(shè)置回true
,從而重新顯示組件。
- 使用
6. 測試
啟動應(yīng)用并測試刷新功能:
npm run serve
打開瀏覽器,訪問 http://localhost:8080
,點(diǎn)擊“刷新”按鈕,查看頁面是否正確刷新。
結(jié)論
通過使用 Vue 3 和 Pinia,我們可以輕松地實(shí)現(xiàn)網(wǎng)頁的局部刷新功能。這種方法不僅可以提高用戶體驗(yàn),還可以使應(yīng)用程序更加靈活和高效。
以上就是使用Vue3和Pinia實(shí)現(xiàn)網(wǎng)頁刷新功能的詳細(xì)內(nèi)容,更多關(guān)于Vue3 Pinia網(wǎng)頁刷新的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決vue 更改計(jì)算屬性后select選中值不更改的問題
下面小編就為大家分享一篇解決vue 更改計(jì)算屬性后select選中值不更改的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03vue中實(shí)現(xiàn)拖拽排序功能的詳細(xì)教程
在業(yè)務(wù)中列表拖拽排序是比較常見的需求,下面這篇文章主要給大家介紹了關(guān)于vue中實(shí)現(xiàn)拖拽排序功能的詳細(xì)教程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08vuejs如何清空表單數(shù)據(jù)、刪除對象中的空屬性公共方法
這篇文章主要介紹了vuejs如何清空表單數(shù)據(jù)、刪除對象中的空屬性公共方法,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03webpack vue項(xiàng)目開發(fā)環(huán)境局域網(wǎng)訪問方法
下面小編就為大家分享一篇webpack vue項(xiàng)目開發(fā)環(huán)境局域網(wǎng)訪問方法,具有很好的參考價(jià)值,希望對大家有所幫助,一起跟隨小編過來看看吧2018-03-03