vue3 キャッシュページキープアライブと統合ルーティング処理の詳細な説明

vue3 キャッシュページキープアライブと統合ルーティング処理の詳細な説明

1. はじめに

ルーティングを使用して他のページにジャンプする場合、現在のページをキャッシュする必要があります。たとえば、リストページから詳細ページにジャンプする場合、リストのコンテンツをキャッシュする必要があり、スクロールバーの位置を保存する必要があります。場合によっては、キャッシュする必要があるページ内の一部のコンテンツがキャッシュされていないことがあります。つまり、さまざまな状況があります。次にいくつか例を示します。

vue2とvue3の使い方は異なります

created() メソッドと mount() メソッドは、ページが初期化されるときに実行されます。ページがキャッシュされている場合、これら 2 つのメソッドは実行されません。また、ページがキャッシュされている場合、vue2 の destroy() メソッドと vue3 の unmounted() メソッドは実行されません。

activated() メソッドはページに入るたびに実行されます

2. 使用

1. vue2とvue3の違い

vue2:

<テンプレート>
	<div id="nav">
	    <router-link to="/">ホーム</router-link> |
	    <router-link to="/about">について</router-link>
  	</div>
	<!-- vue2.x の設定 -->
   <キープアライブ>
    <router-view v-if="$route.meta.keepAlive" />
  </キープアライブ>
  <ルータービュー v-if="!$route.meta.keepAlive"/>
</テンプレート>

vue3:

<テンプレート>
	<div id="nav">
	    <router-link to="/">ホーム</router-link> |
	    <router-link to="/about">について</router-link>
  	</div>
  <!-- Vue3.0 構成コンポーネントの書き込みが修正されました -->
  <router-view v-slot="{ コンポーネント }">
    <キープアライブ>
      <component :is="コンポーネント" v-if="$route.meta.keepAlive"/>
    </キープアライブ>
    <component :is="コンポーネント" v-if="!$route.meta.keepAlive"/>
  </ルータービュー> 
</テンプレート>

route.js での構成:

パス: '/'、
名前: 'ホーム'、
コンポーネント: ホーム、
メタ:{
  キープアライブ: 真
}

効果:

2. ページ上の一部のデータはキャッシュする必要がない

activated() メソッドで部分的なリフレッシュを必要とするロジックを処理できます。

...
部分的に更新する必要があるデータ: <input type="text" v-model="newStr" />
...
データ() {
  戻る {
    新しい文字列: "2",
  };
},
マウント() {
  console.log("マウントされたメソッドが実行されました");
  this.newStr = "3";
},
アクティブ化() {
  console.log("actived メソッドが実行されました...");
  this.newStr = "4";
}

効果:

3. keepAliveプロパティを動的に設定する

vue ファイルで keepAlive プロパティを設定することもできます。これは beforeRouteEnter() メソッドに追加された場合にのみ有効です。つまり、ページに入るときに Home.vue に追加します。

  // コンポーネントのガードを使用して、ページを離れるイベントで何かを実行します // to はリダイレクトされるルート、from は前のページのルートです beforeRouteEnter(to, from, next) {
    to.meta.keepAlive を true に設定します。
    //ルートは next() にジャンプし続けます。
  }

4. includeとexcludeを使用してキャッシュする必要があるコンポーネントを構成する

app.vue で設定します:

<router-view v-slot="{ コンポーネント }">
  <キープアライブを含める="testKA">
    <コンポーネント:is="コンポーネント"/>
  </キープアライブ>
</ルータービュー>

そのうち、testKA はコンポーネントの名前に対応します。

エクスポートデフォルト{
    name:'testKA', // キープアライブインクルード属性はコンポーネント名と一致する
    データ() {戻り値 {}},
    アクティブ化() {
        // キープアライブキャッシュページのライフサイクルは、入力されるたびに実行されます},
}

また、include の使用方法は次のとおりです。

<!-- カンマ区切りの文字列 -->
<キープアライブを含める="a,b">
  <コンポーネント:is="view"></コンポーネント>
</キープアライブ>

<!-- 正規表現 (`v-bind` を使用) -->
<キープアライブ:include="/a|b/">
  <コンポーネント :is="view"></コンポーネント>
</キープアライブ>

<!-- 配列 (`v-bind` を使用) -->
<キープアライブ:include="['a', 'b']">
  <コンポーネント :is="view"></コンポーネント>
</キープアライブ>

exclude の使用方法は include と同じで、キャッシュされないコンポーネントを表します。

5. 一部のページはキャッシュする必要があり、一部のページは更新する必要があります

説明: 3 つのページ a、b、c がある場合、a->b、b でページが更新され、次に b->c、c->b、b でページは更新されず、次に b->a、a->b、b でページが更新されます。
セルフテストはvuexでのみ実現できますが、欠点はページがキャッシュされているときにactivated()メソッドが実行されないことです。

6. キャッシュは第1レベルのルーティングでのみ有効です

セカンダリルートでキャッシュを使用する必要がある場合は、プライマリルートで同じ設定を行うことができます。

store.js コード:

州: {
  キープアライブ:[]
},
突然変異:
  SET_KEEP_ALIVE(状態、パラメータ) {
    state.keepAlives = パラメータ
  }
},
ゲッター:{
  キープアライブ:関数(状態){
    state.keepAlivesを返す
  }
}

App.vue コード:

<テンプレート>
  <div id="nav">
    <router-link to="/bbb">BBB</router-link> |
    <router-link to="/home">ホーム</router-link> |
    <router-link to="/about">について</router-link>
  </div>
  <router-view v-slot="{ コンポーネント }">
    <キープアライブ:include="keepAlive">
      <コンポーネント:is="コンポーネント"/>
    </キープアライブ>
  </ルータービュー>
</テンプレート>
<スクリプト>
  エクスポートデフォルト{
    計算:{
      キープアライブ(){
        これを返します。$store.getters.keepAlive
      }
    }
  }
</スクリプト>

Home.vue コード:

// コンポーネント内のガードを使用して、ページを離れるイベントで何かを実行します // to はリダイレクトされるルート、from は前のページのルートです beforeRouteEnter(to, from, next) {
  次へ(vm=>{
    if(from.path == "/bbb"){
      vm.$store.commit("SET_KEEP_ALIVE",["ホーム"])
    }
  });
},
beforeRouteLeave(to, from, next) {
  to.path == "/about"の場合{
    console.log("/about ページにリダイレクトされます...")
  } それ以外 {
    console.log("/about 以外のページにリダイレクトされます...")
    this.$store.commit("SET_KEEP_ALIVE",[])
  }
  // ルートは next() にジャンプし続けます。
}

効果:

要約する

これで、vue3 キャッシュ ページ キープアライブと統合ルーティング処理に関するこの記事は終了です。vue3 キャッシュ ページ キープアライブに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • キャッシュ ページ効果を実現するために vue-router で keep-Alive を実行するサンプル コード
  • キャッシュされたページを柔軟にするkeep-alive + vuexの詳細な説明
  • Vue 組み込みコンポーネントのキープアライブ イベントの動的キャッシュの例
  • Vue プロジェクト keepAlive は vuex と連携してルーティング キャッシュ モードを動的に設定します

<<:  MySQLインデックスに関する詳細を共有する

>>:  Dockerのデフォルトネットワークセグメントを変更する実装方法の分析

推薦する

BT Baota Panel php7.3 および php7.4 が ZipArchive をサポートしない問題の解決方法

Baota PanelのPHP7.3バージョンがZipArchiveをサポートしていないため、プログ...

XHTML でのハイパーリンク タグの使用に関するチュートリアル

ハイパーリンク。「リンク」とも呼ばれます。ハイパーリンクは、私たちが閲覧する Web ページのいたる...

Dockerはコード検出プラットフォームSonarQubeを構築し、Mavenプロジェクトのプロセスを検出します

1 はじめに優れたコーディング習慣は優れたプログラマーが備えるべき資質ですが、コードの品質を保証する...

MySQL テーブル名の大文字と小文字の選択

目次1. 大文字と小文字の区別を決定するパラメータ2. パラメータ変更に関する注意事項要約: 1. ...

MySQL における count(*)、count(1)、count(col) の違いのまとめ

序文count 関数は、テーブルまたは配列内のレコードをカウントするために使用されます。count(...

Mysql 複数データベースのバックアップ コード例

この記事は主にMysqlの複数データベースのバックアップのコード例を紹介します。この記事ではサンプル...

興味深いカウントダウン効果を実現するjs

js興味深いカウントダウンケース、参考までに、具体的な内容は次のとおりですコード: <!DO...

JavaScript は、シンプルな虫眼鏡の最も完全なコード分析を実装します (ES5)

この記事では、参考までに、シンプルな虫眼鏡を実装するためのJavaScriptの具体的なコードを紹介...

Docker Toolboxを完全にアンインストールする方法

Docker Toolbox は、Windows 10 Professional より前のバージョン...

process.env.NODE_ENV 本番環境モードを設定する方法

始める前に、process.env.NODE_ENV にはデフォルトで開発と本番の 2 つの状態しか...

中国のウェブサイトユーザーエクスペリエンスランキング

<br />ユーザーエクスペリエンスは中国のウェブサイトでますます重視されており、ユーザ...

MySQL 8.0.11 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0のインストールと設定方法は参考までに。具体的な内容は以下のとおりです。ダウンロード...

Vue+video.jsはビデオプレイリストを実装します

この記事では、ビデオプレイリストを実装するためのvue + video.jsの具体的なコードを参考ま...

Ajax リクエストにおけるクロスドメイン問題の原因と解決策

目次1. クロスドメインはどのように形成されるのでしょうか? 2. クロスドメインの根本的な原因3....