使用Vue3和Pinia實(shí)現(xiàn)網(wǎng)頁刷新功能
概述
在現(xiàn)代 Web 開發(fā)中,保持用戶界面的動(dòng)態(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è)部分會(huì)重新加載以展示最新數(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)槲覀儠?huì)使用 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 存儲(chǔ)模塊。
- 導(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,這會(huì)導(dǎo)致<component>被隱藏,從而觸發(fā)組件的銷毀。 - 使用
nextTick確保 DOM 更新后,再將flag設(shè)置回true,從而重新顯示組件。
- 使用
6. 測試
啟動(dòng)應(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實(shí)現(xiàn)微信公眾號(hào)h5跳轉(zhuǎn)小程序的示例代碼
本文主要介紹了vue實(shí)現(xiàn)微信公眾號(hào)h5跳轉(zhuǎn)小程序的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
vue中vee validate表單校驗(yàn)的幾種基本使用
這篇文章主要介紹了vee-validate表單校驗(yàn)的基本使用,需要的朋友可以參考下2018-06-06
vue引入iconfont圖標(biāo)庫的優(yōu)雅實(shí)戰(zhàn)記錄
使用組件庫時(shí),圖標(biāo)往往不能滿足需求,所以我們常常需要用到第三方圖標(biāo)庫,這篇文章主要給大家介紹了關(guān)于vue引入iconfont的相關(guān)資料,需要的朋友可以參考下2021-06-06
Vue如何優(yōu)雅地復(fù)制一行帶附件的表格數(shù)據(jù)
在做 Vue 項(xiàng)目的時(shí)候,大家是不是經(jīng)常遇到這樣的需求,點(diǎn)一下復(fù)制按鈕,把這行表格數(shù)據(jù)復(fù)制一份放在下方,除了附件字段之外其他都保留,所以本文我們就來看看如何優(yōu)雅地復(fù)制一行帶附件的數(shù)據(jù),不破壞原始數(shù)據(jù)結(jié)構(gòu)吧2025-09-09
vue 實(shí)現(xiàn)小程序或商品秒殺倒計(jì)時(shí)
這篇文章主要介紹了vue 實(shí)現(xiàn)倒計(jì)時(shí)秒殺的組件,緊接著通過實(shí)例代碼給大家介紹小程序或者vue商品秒殺倒計(jì)時(shí)功能,需要的朋友可以參考下2019-04-04
Vue3報(bào)錯(cuò)computed?value?is?readonly的解決方案
這篇文章主要為大家詳細(xì)介紹了Vue3報(bào)錯(cuò)computed?value?is?readonly的原因排查和解決方法,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下2026-03-03
vue結(jié)合echarts繪制一個(gè)支持切換的折線圖實(shí)例
這篇文章主要介紹了vue結(jié)合echarts繪制一個(gè)支持切換的折線圖實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Vue中使用?Aplayer?和?Metingjs?添加音樂插件的方式
這篇文章主要介紹了Vue中使用?Aplayer?和?Metingjs?添加音樂插件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08

