最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Vue3和Pinia實(shí)現(xiàn)網(wǎng)頁(yè)刷新功能

 更新時(shí)間:2024年08月22日 09:51:52   作者:庫(kù)庫(kù)林_沙琪馬  
在現(xiàn)代 Web 開發(fā)中,保持用戶界面的動(dòng)態(tài)性和響應(yīng)性至關(guān)重要,當(dāng)用戶觸發(fā)某些操作時(shí),例如點(diǎn)擊按鈕或者完成表單提交,我們往往需要刷新頁(yè)面的一部分來(lái)展示最新的數(shù)據(jù),本文將介紹如何使用 Vue 3 和 Pinia 來(lái)實(shí)現(xiàn)這一功能,需要的朋友可以參考下

概述

在現(xiàn)代 Web 開發(fā)中,保持用戶界面的動(dòng)態(tài)性和響應(yīng)性至關(guān)重要。當(dāng)用戶觸發(fā)某些操作時(shí),例如點(diǎn)擊按鈕或者完成表單提交,我們往往需要刷新頁(yè)面的一部分來(lái)展示最新的數(shù)據(jù)。本文將介紹如何使用 Vue 3 和 Pinia 來(lái)實(shí)現(xiàn)這一功能。

技術(shù)棧

  • Vue 3
  • Pinia (狀態(tài)管理)

目標(biāo)

實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)刷新功能,當(dāng)用戶點(diǎn)擊刷新按鈕時(shí),頁(yè)面中的某個(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 來(lái)管理狀態(tài),并使用 Vue Router 來(lái)處理頁(yè)面的導(dǎo)航。

3. 配置 Pinia

創(chuàng)建一個(gè) Pinia 的狀態(tài)管理倉(cāng)庫(kù)來(lá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 來(lái)切換 refresh 的狀態(tài)。

4. 設(shè)置 頂部刷新組件

現(xiàn)在我們需要在組件中使用這個(gè)倉(cāng)庫(kù),并且添加一個(gè)按鈕來(lái)觸發(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)來(lái)檢查是否需要刷新當(dāng)前路由。

5. 刷新的主頁(yè)面

這段代碼定義了一個(gè) Vue 3 組件,該組件主要用于處理路由組件的過(guò)渡效果,并且具備一個(gè)刷新功能,用 v-if 來(lái)銷毀路由組件的入口。

<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)聽(tīng)倉(cāng)庫(kù)內(nèi)部的數(shù)據(jù)是否發(fā)生變化,如果反生變化,說(shuō)明用戶點(diǎn)擊過(guò)刷新按鈕
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>
  1. 導(dǎo)入依賴

    • 導(dǎo)入 watchref, 和 nextTick 函數(shù),這些是 Vue 3 的 Composition API 中的核心函數(shù)。
    • 導(dǎo)入 useLayOutSettingStore,這是來(lái)自 @/store/modules/setting 的 Pinia 存儲(chǔ)模塊。
  2. 創(chuàng)建響應(yīng)式引用

    • let flag = ref(true); 創(chuàng)建一個(gè)響應(yīng)式的布爾值 flag,初始值為 true。
  3. 監(jiān)聽(tīng)數(shù)據(jù)變化

    • 使用 watch 函數(shù)監(jiān)聽(tīng) layoutSettingStore.refresh 的變化。
    • 當(dāng) refresh 發(fā)生變化時(shí),先將 flag 設(shè)置為 false,這會(huì)導(dǎo)致 <component> 被隱藏,從而觸發(fā)組件的銷毀。
    • 使用 nextTick 確保 DOM 更新后,再將 flag 設(shè)置回 true,從而重新顯示組件。

6. 測(cè)試

啟動(dòng)應(yīng)用并測(cè)試刷新功能:

npm run serve

打開瀏覽器,訪問(wèn) http://localhost:8080,點(diǎn)擊“刷新”按鈕,查看頁(yè)面是否正確刷新。

結(jié)論

通過(guò)使用 Vue 3 和 Pinia,我們可以輕松地實(shí)現(xiàn)網(wǎng)頁(yè)的局部刷新功能。這種方法不僅可以提高用戶體驗(yàn),還可以使應(yīng)用程序更加靈活和高效。

以上就是使用Vue3和Pinia實(shí)現(xiàn)網(wǎng)頁(yè)刷新功能的詳細(xì)內(nèi)容,更多關(guān)于Vue3 Pinia網(wǎng)頁(yè)刷新的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

安徽省| 湘阴县| 灵宝市| 延安市| 阳西县| 吴桥县| 吴桥县| 民乐县| 辽阳县| 奈曼旗| 宁化县| 休宁县| 永川市| 丹凤县| 彰武县| 安图县| 庆安县| 香港| 兰坪| 莒南县| 兴山县| 钟祥市| 高青县| 辽宁省| 扎赉特旗| 盐源县| 宜宾县| 双桥区| 盈江县| 荣昌县| 鄂尔多斯市| 伊宁市| 竹山县| 长阳| 神农架林区| 独山县| 荆门市| 祥云县| 宜昌市| 农安县| 南靖县|