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 マルチインスタンス構成のアプリケーションシナリオ

推薦する

Linuxはiptablesを使用して複数のIPからのサーバーへのアクセスを制限します

序文Linux カーネルでは、netfilter は、パケット フィルタリング、ネットワーク アドレ...

MySQL 文字列分割操作 (区切り文字を含む文字列のインターセプション)

区切り文字なしの文字列抽出質問の要件データベース内のフィールド値:実装効果: 1行のデータを複数行に...

jsは動的にテーブルを生成します(ノード操作)

この記事の例では、テーブルを動的に生成するjsの具体的なコードを参考までに共有しています。具体的な内...

MySql データベースにおける単一テーブル クエリと複数テーブル結合クエリの効率の比較

この間、プロジェクトに取り組んでいるときに、データ間の接続が非常に複雑なモジュールに遭遇しました。テ...

ウェブフロントエンドウェブ開発の一般的なプロセスの簡単な紹介

フロントエンド開発を行っている初心者の学生を多く見かけますが、彼らの効率は比較的遅いです。常にコード...

JavaScript配列の重複排除のいくつかの方法についての詳細な説明

目次1.重複排除を設定する2. 重複を削除するには、2 回の for ループを使用します。 3. i...

Baidu Union 環境での広告スキル (グラフィック チュートリアル)

最近、製品部門のユーザーエクスペリエンスチームの学生は、アライアンス環境における広告に関する一連の研...

TypeScript デコレータ定義

目次1. コンセプト1.1 定義1.2 デコレータファクトリー1.3 デコレータの組み合わせ1.4 ...

React+Ant Design開発環境をセットアップするための実装手順

基礎1. スキャフォールディングを使用してプロジェクトを作成し、開始する1.1 足場を設置する: n...

CSSで背景ぼかしを設定する方法

ページを作成するときに、ページの見栄えを良くするために、背景画像を設定する必要があることがよくありま...

React のグローバル状態管理の 3 つの基本メカニズムの調査

目次序文小道具コンテクスト州要約する序文最新のフロントエンド フレームワークはすべて、コンポーネント...

Vue はインターフェースのスライド効果を実装します

この記事では、インターフェースのスライド効果を実現するためのVueの具体的なコードを例として紹介しま...

MySQL のインデックスとビューの使用方法と違いの詳細な説明

序文この記事では主に、MySQL のインデックスとビューの使用方法と違いを紹介し、参考と学習のために...

DockerはPruneコマンドを使用してnoneイメージをクリーンアップします

目次無イメージの創造と混乱Noneオブジェクトをクリーンアップする方法トリムミラーコンテナで使用され...

シンプルなウェブページレイアウトの構造と表現原理の共有

構造とパフォーマンスの紹介HTML 構造、CSS 表現、JavaScript 動作。Web ページの...