vue3 三種刷新頁(yè)面方式

在 Vue 3 中,有幾種方法可以刷新頁(yè)面。最常見(jiàn)的方法是使用 JavaScript 的 window.location.reload 方法來(lái)刷新整個(gè)頁(yè)面。你也可以使用 Vue Router 提供的功能來(lái)重新加載當(dāng)前的路由組件。以下是幾種不同的刷新頁(yè)面的方法及其示例代碼。

方法一:使用 window.location.reload

這是最簡(jiǎn)單和直接的方法,使用 JavaScript 的 window.location.reload 方法來(lái)刷新整個(gè)頁(yè)面。

示例

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="refreshPage">刷新頁(yè)面</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const message = ref('Hello, Vue!');

    const refreshPage = () => {
      window.location.reload();
    };

    return {
      message,
      refreshPage
    };
  }
};
</script>

<style scoped>
/* 這里可以添加你的樣式 */
</style>

方法二:使用 Vue Router 重新加載當(dāng)前路由

如果你使用 Vue Router,可以使用 this.$router.push 方法重新導(dǎo)航到當(dāng)前路由,從而重新加載當(dāng)前組件。

示例

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="refreshRoute">刷新當(dāng)前路由</button>
  </div>
</template>

<script>
import { ref } from 'vue';
import { useRouter, useRoute } from 'vue-router';

export default {
  setup() {
    const message = ref('Hello, Vue!');
    const router = useRouter();
    const route = useRoute();

    const refreshRoute = () => {
      router.push({ path: route.path, query: { ...route.query, t: Date.now() } });
    };

    return {
      message,
      refreshRoute
    };
  }
};
</script>

<style scoped>
/* 這里可以添加你的樣式 */
</style>

方法三:使用 Vue Router 重新加載當(dāng)前組件

你也可以通過(guò)手動(dòng)觸發(fā)組件的卸載和掛載來(lái)重新加載當(dāng)前組件。

示例

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="refreshComponent">刷新當(dāng)前組件</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const message = ref('Hello, Vue!');
    const key = ref(0);

    const refreshComponent = () => {
      key.value += 1;
    };

    return {
      message,
      key,
      refreshComponent
    };
  },
  render() {
    return (
      <div key={this.key}>
        <p>{this.message}</p>
        <button onClick={this.refreshComponent}>刷新當(dāng)前組件</button>
      </div>
    );
  }
};
</script>

<style scoped>
/* 這里可以添加你的樣式 */
</style>

解釋

  • window.location.reload 方法

    • 這是最直接的方法,刷新整個(gè)頁(yè)面。頁(yè)面會(huì)完全重新加載,包括重新加載所有資源(HTML、CSS、JavaScript 等)。
    • 使用 window.location.reload() 方法來(lái)實(shí)現(xiàn)。
  • 使用 Vue Router 重新加載當(dāng)前路由

    • 使用 Vue Router 的 push 方法重新導(dǎo)航到當(dāng)前路由,從而重新加載當(dāng)前組件。
    • 通過(guò)在路由參數(shù)中添加一個(gè)時(shí)間戳(t: Date.now()),確保路由發(fā)生變化,從而觸發(fā)重新加載。
  • 手動(dòng)觸發(fā)組件的卸載和掛載

    • 使用一個(gè) key 來(lái)強(qiáng)制重新渲染組件。
    • 每次點(diǎn)擊按鈕時(shí),增加 key 的值,Vue 會(huì)認(rèn)為這是一個(gè)新的組件實(shí)例,從而重新掛載組件。

總結(jié)

  • 刷新整個(gè)頁(yè)面:使用 window.location.reload 方法,這是最簡(jiǎn)單和直接的方式。
  • 重新加載當(dāng)前路由:使用 Vue Router 的 push 方法,可以重新導(dǎo)航到當(dāng)前路由,從而重新加載當(dāng)前組件。
  • 手動(dòng)觸發(fā)組件的卸載和掛載:通過(guò)修改組件的 key,強(qiáng)制重新渲染組件。

選擇哪種方法取決于你的具體需求。如果你只需要刷新當(dāng)前組件,使用 Vue Router 或手動(dòng)觸發(fā)組件的卸載和掛載會(huì)更加高效和靈活。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 我們?cè)趯戫?xiàng)目的時(shí)候,經(jīng)常會(huì)遇到,用戶執(zhí)行完某個(gè)動(dòng)作,改變了某些狀態(tài),需要重新刷新頁(yè)面,以此來(lái)重新渲染頁(yè)面。如:用戶...
    吳小冷閱讀 165評(píng)論 0 0
  • 一、原始方法: location.reload(); 二、vue自帶路由跳轉(zhuǎn) this.$router.go(0)...
    妮爾波閱讀 360評(píng)論 0 0
  • 1.場(chǎng)景 在處理列表時(shí),常常有刪除一條數(shù)據(jù)或者新增數(shù)據(jù)之后需要重新刷新當(dāng)前頁(yè)面的需求。 2.遇到的問(wèn)題 1. 用v...
    壹個(gè)億閱讀 2,969評(píng)論 0 0
  • 在Vue項(xiàng)目中,刷新當(dāng)前頁(yè)除了 window.reload(),你還能想到什么辦法?而且這種辦法會(huì)重新加載資源出現(xiàn)...
    編程范兒閱讀 477評(píng)論 0 1
  • 我們?cè)趯戫?xiàng)目的時(shí)候,經(jīng)常會(huì)遇到,用戶執(zhí)行完某個(gè)動(dòng)作,改變了某些狀態(tài),需要重新刷新頁(yè)面,以此來(lái)重新渲染頁(yè)面。如:用戶...
    一人創(chuàng)客閱讀 523評(píng)論 0 0

友情鏈接更多精彩內(nèi)容