Vue におけるキープアライブ マルチレベル ルーティング キャッシュの問題

Vue におけるキープアライブ マルチレベル ルーティング キャッシュの問題

1. 問題の説明

調整センターでは、最後の 2 つの便利なナビゲーション メニューが同じモジュールで、レベル 3 以上のメニューである場合、2 つの便利なタブを切り替えるときに正常にキャッシュできます。ただし、最後のタブが削除されると、もう一方のタブ ページはキャッシュされなくなります。

2. 原因分析

デフォルトでは、keep-alive は 2 レベルのキャッシュをサポートしており、レベル 3 以上のページのキャッシュは無効です。以前の処理方法は、ルートの変更を監視した後、現在のルート識別子と親識別子を一緒に保存します。複数のページが存在する場合、いずれかのページを閉じると、自分自身と親の識別子も削除されます。このとき、配列には親識別子がないため、同じレベルの他のページのキャッシュは無効になります。

3. 解決策

ルーティング構成テーブル内のすべてのルートを 2 つの操作に分割します。1 つはメニュー表示用にそのまま保持すること、もう 1 つはルーティング構成テーブルをフラット化してすべてのルートをセカンダリ ルートに処理し、keep-alive がデフォルトでキャッシュをサポートできるようにすることです。

4. 処理

完全なルーティング構成を取得する

定数モジュール = []
files.keys().forEach(キー => {
    const filesObj = files(キー).default || files(キー)
    Object.keys(filesObj).forEach(keyOne => {
        modules.push(filesObj[keyOne])
    })
})

操作によりルーティング構成が完了しました

export const menuList = modules; // メニュー表示用​
const routerList = formatTwoStageRoutes(formatFlatteningRoutes(modules)); // ルートを 2 段階ルートにフラット化します​
const ルーター = 新しい VueRouter({
    スクロール動作: () => ({ y: 0 }),
    モード: '履歴'、
    ベース: process.env.BASE_URL、
    ルート: routerList, //ルーティング設定項目でフラット化されたルートを使用する})

平坦化法

エクスポートconst formatFlatteningRoutes = (routesList => {
  routeList.length <= 0 の場合、routesList を返します。
  リストを [] にします。
  ルートリスト.forEach(v => {
    if(v.path === '/') {
      // 初期レイアウトとホームページを追加するために使用されます。他のセンター構成は、レイアウトと親ノードをフィルターし、子のルートのみを保持します list.push(v);
      リスト = list.concat(formatFlatteningRoutes(v.children))
    } そうでない場合 (v.children && v.children.length > 0) {
      リスト = list.concat(formatFlatteningRoutes(v.children))
    } それ以外 {
      リストをプッシュします。
    }
  })
  リストを返します。
})
​
エクスポート const formatTwoStageRoutes = list => {
  if (list.length <= 0) の場合はリストを返します。
  定数ルーターリスト = [];
  リスト.forEach(v => {
    (v.path === '/')の場合{
      ルータリスト.push({
        コンポーネント: v.component、
        名前: v.name、
        パス: v.path,
        リダイレクト: 動詞、
        メタ: v.meta,
        子供たち: []
      })
    } そうでない場合 (v.path === '/login' || v.path === '/showcasePage') {
      // レイアウト設定を必要としないページ routerList.push(v)
    } それ以外 {
      ルーターリスト[0].children.push({ ...v })
    }
  })
  routerList を返します。
}

Vue のキープアライブ マルチレベル ルーティング キャッシュ問題に関するこの記事はこれで終わりです。Vue キープアライブ マルチレベル ルーティング キャッシュに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueのキープアライブコンポーネントは、複数レベルのネストされたルートのキャッシュを実装します。
  • Vue のルーティングガードとキープアライブライフサイクルの詳細な説明
  • Vue のキープアライブの詳細な説明
  • vue3 キャッシュページキープアライブと統合ルーティング処理の詳細な説明
  • Vue でキープアライブを使用した後にキャッシュをクリアする方法
  • Vueキープアライブの実装原理の分析

<<:  Dockerコンテナ起動時に固定IPを設定する実装

>>:  MySQL マルチインスタンス構成のアプリケーションシナリオ

推薦する

MySQL デッドロック ルーチン: 一意のインデックスの下でのバッチ挿入順序の不一致

序文デッドロックの本質はリソースの競合です。バッチ挿入の順序が一貫していないと、デッドロックに陥りや...

DockerでRabbitMqの共通クラスタとミラークラスタを構築する詳細な操作

目次1. RabbitMqの動作環境を構築する1.検索を通じてrabbitmqイメージを照会する2....

JSデータ型検出のさまざまな方法の概要

目次背景データ型を決定する方法は何ですか? 1. typeof を使用して基本データ型を決定します。...

Dockerコンテナを停止または強制終了できない問題の解決策

Docker バージョン 1.13.1問題プロセス特定の環境のMySQLコンテナを停止、強制終了、ま...

Vueはページキャッシュ機能を実装する

この記事の例では、ページキャッシュ機能を実装するためのVueの具体的なコードを参考までに共有していま...

CentOS 7 で MySQL 5.7.23 をアップグレードする際の落とし穴と解決策

序文最近、CentOS 7 で MySQL 5.7.23 をアップグレードする際に落とし穴を発見しま...

Dockerボリュームコンテナ間のデータ共有の実装

ボリュームとは何ですか?ボリュームは英語で容量を意味し、Docker ではデータ ボリューム、つまり...

vue シンプルメモ帳開発の詳しい説明

この記事では、参考までにEasy Notepadを実装するためのVueの具体的なコードを紹介します。...

Docker コンテナのネットワーク設定によく使われるコマンドの詳しい説明

基本的なネットワーク構成Docker はイメージに基づいて複数のコンテナを「開く」ことができ、各コン...

nginx設定ファイルの場所を見つける方法の詳細な説明

よく知らないサーバーの場合や、かなり前にインストールした場所を忘れてしまった場合、構成ファイルの場所...

Linux で MySQL のデフォルト エンコーディングを変更する方法

開発プロセス中に、MySQL データベースを復元した後にデータベース データに文字化けが発生した場合...

両端揃えレイアウトを実現する CSS 列のサンプルコード

1. 堂々巡りいろいろ試行錯誤した結果、均等割り付けレイアウトを実現する最も簡単な方法は CSS ...

Vite2.0の落とし穴

目次Viteプロジェクトビルドの最適化他のやっとこれは前回の記事の補足です。設定プロジェクトで遭遇し...

Linux システムの仮想ホストで Swoole Loader 拡張機能を有効にする方法

特記事項: Swoole 拡張機能のみがインストールされ、サーバーはホストにインストールされません。...

Linux+ApacheサーバURLの大文字と小文字の区別の問題を解決する

今日、問題が発生しました。ブラウザのアドレスバーにURLアドレスを入力する際、ページを正常にアクセス...