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

推薦する

WebpackはCSSファイルを読み込み、その設定方法

webpackはCSSファイルとその設定をロードします複数の CSS ファイルを作成した後、HTML...

WeChat ミニプログラム ユーザー認証のベストプラクティス ガイド

序文WeChat アプレットを開発する際には、ユーザーの権限が必要なページを使用する必要があることが...

MySQL OOM (メモリオーバーフロー) の解決策

OOM は「Out Of Memory」の略で、メモリオーバーフローを意味します。メモリ オーバーフ...

MySQL Installer 8.0.21 インストール チュートリアル (画像とテキスト付き)

1. 理由新しいシステムに MySQL を再インストールする必要があったので、将来詳細を忘れた場合...

LinuxシステムにおけるMySQLの一般的な操作コマンド

仕える: # chkconfig --list すべてのシステムサービスを一覧表示する# chkco...

ReactHooks バッチ更新状態とルートパラメータの取得例の分析

目次1. 一括更新の方法コンソール出力2. フックがルーティングパラメータを取得する方法実行効果1....

簡潔なReactコンポーネントを書くためのヒント

目次スプレッド演算子を使用してプロパティを渡すのは避けてください関数パラメータをオブジェクトにカプセ...

バッチモードでtopコマンドを実行する方法

top コマンドは、Linux システムのパフォーマンスを監視するために誰もが使用している最適なコマ...

MySQL MHA のセットアップと切り替えに関するいくつかのエラー ログの概要

1: masterha_check_repl レプリカ セット エラー レプリケートが構成ファイルで...

JavaScript の isPrototypeOf 関数

目次1. isPrototypeOf()例 1、オブジェクト クラス インスタンス:例 2: Hum...

CSSを使用してAndroidシステムの読み込みアニメーションを実装する

Web には一般的な読み込みアイコンが 2 つあります。1 つは iOS の「菊」、もう 1 つは ...

Windows Server 2008 64ビット MySQL5.6 インストール不要版 設定方法図

1 公式ウェブサイトから MySQL 5.6 バージョンの圧縮パッケージmysql-5.6.36-w...

Dockerの核となる原則であるCgroupの詳細な説明

カーネル内の強力なツール cgroup は、NameSpace によって分離されたリソースを制限でき...

ポップアップウィンドウの上下中央左右と透明な背景のロックウィンドウ効果を実現する CSS

クリック後にポップアップボックスを実現し、上下左右に中央揃えし、灰色の透明マスクを追加してウィンドウ...

MySQL 8.0.14 のインストールと設定方法のグラフィックチュートリアル (一般)

MySQLサービス8.0.14のインストール(一般)の参考までに、具体的な内容は次のとおりです。イ...