検索
ホームページウェブフロントエンドVue.js非常に快適な Vue ページ維持ソリューションを共有する

この記事は、Vue に関する関連知識を提供します。主に、非常に快適な Vue ページ維持ソリューションを共有します。コード例もあります。興味のある友人は、以下を参照してください。皆さんが協力してくれることを願っています。

ページのキープアライブをより安定させるには、何をしますか?

#1 行の設定で実装しました

非常に快適な Vue ページ維持ソリューションを共有する

Vue ページのキープアライブとは、ユーザーが現在のページを離れた後に、最後に表示したページの状態を復元するに戻ることができます。この技術により、ユーザーは煩雑な操作に邪魔されることなく、よりスムーズで自然なブラウジング体験を楽しむことができます。

なぜページを存続させておく必要があるのでしょうか?

ページを維持すると、ユーザー エクスペリエンスが向上します。例えば、ページネーションのある表ページ([ページA])からデータ詳細ページ([ページB])にジャンプし、データを閲覧した後、[ページB]から[ページA]に戻った場合] の場合、ページキープアライブがない場合、[ページ A] がリロードされて最初のページにジャンプし、ページとデータを再度選択する必要があるため、ユーザーは非常に煩わしくなります。したがって、ページキープアライブ技術を使用すると、ユーザーが[ページA]に戻ったときに、以前に選択していたページ番号とデータが復元され、ユーザーエクスペリエンスがよりスムーズになります。

ページを存続させるにはどうすればよいですか?

状態ストレージ

このソリューションは最も直観的であり、原則は、[ページ A] を離れる前に維持する必要がある状態を手動で保存することです。状態は、

LocalStoreSessionStore、または IndexedDB に保存できます。 [Page A] コンポーネントの onMounted フックで、以前の状態が存在するかどうかを確認し、存在する場合は外部ストレージから状態を復元します。 ######何が問題ですか?

心の無駄(悩み/心配)。このソリューションの問題は、コンポーネントを作成するときに、特定のページにジャンプするときに状態を保存することを明確に知っておく必要があることです。

    子コンポーネントの状態を解決できません。ページコンポーネントのステータスをページコンポーネントに保存することもできますが、サブコンポーネントを保存する方法。このような構造は合理的ではないため、ページ コンポーネント内のすべてのサブコンポーネントの状態を維持することは不可能です。
  • コンポーネントのキャッシュ

Vue

の組み込みコンポーネントを使用する

<keepalive></keepalive>でラップされた動的スイッチング コンポーネントをキャッシュします。それ (これは コンポーネントでもあります)。 <keepalive></keepalive>動的コンポーネントをラップする場合、非アクティブなコンポーネントは破棄されずにキャッシュされます。コンポーネントが <keepalive></keepalive> で切り替えられると、activated および deactivated ライフサイクル フックが mounted および unmounted を置き換えます。 ###針。最も重要なことは、<keepalive></keepalive> は、ラップされたコンポーネントのルート ノードだけでなく、その子孫ノードにも適用されるということです。 <keepalive></keepalive>

vue-router

と組み合わせると、ページを維持できます。実装コードは次のとおりです: <pre class='brush:php;toolbar:false;'>&lt;template&gt; &lt;RouterView v-slot=&quot;{ Component }&quot;&gt; &lt;KeepAlive&gt; &lt;component :is=&quot;Component&quot;/&gt; &lt;/KeepAlive&gt; &lt;/RouterView&gt; &lt;/template&gt;</pre>## #どうしたの? ? ページ キープアライブは不正確です。上記の方法ではページキープアライブは実現できますが、例えば[ページA]がアプリケーションのホームページ、[ページB]がデータ一覧ページ、[ページC]がデータ詳細ページであるなど、運用上の要件を満たすことはできません。ユーザーがデータの詳細を表示するための移動行は次のとおりです: [ページ A]->[ページ B]->[ページ C] この移動行では、[ページ B]->[ページ C] をキャッシュする必要があります[ ページ B]、[ページ C]→[ページ B] に変更する場合は、そこから [ページ B] に戻す必要があります。ただし、[ページB] -> [ページA]の場合、[ページB]をキャッシュする必要はなく、上記の方法ではそのような構成は実現できません。

ベスト プラクティス
  • キープアライブの最も理想的な方法は、コンポーネント コードに侵入することなく、単純な構成でオンデマンド ページ キープアライブを実現することです。

[コンポーネント コードへの侵入なし] このルールにより、最初のメソッドの実装を排除できます。2 番目のメソッド [コンポーネント キャッシュ] は [オンデマンド ページ キープアライブ] でのみ失敗します。次に 2 番目の方法を変換します。

router のルーティング構成でオンデマンドのキープアライブを構成し、<keepalive></keepalive>

と組み合わせた読み取り構成を提供します。 include属性だけで十分です。 ルーティング設定src/router/index.ts

import useRoutersStore from &#39;@/store/routers&#39;;

const routes: RouteRecordRaw[] = [
  {
    path: &#39;/&#39;,
    name: &#39;index&#39;,
    component: () => import(&#39;@/layout/index.vue&#39;),
    children: [
      {
        path: &#39;/app&#39;,
        name: &#39;App&#39;,
        component: () => import(&#39;@/views/app/index.vue&#39;),
      },
      {
        path: &#39;/data-list&#39;,
        name: &#39;DataList&#39;,
        component: () => import(&#39;@/views/data-list/index.vue&#39;),
        meta: {
          // 离开【/data-list】前往【/data-detail】时缓存【/data-list】
          leaveCaches: [&#39;/data-detail&#39;],
        }
      },
      {
        path: &#39;/data-detail&#39;,
        name: &#39;DataDetail&#39;,
        component: () => import(&#39;@/views/data-detail/index.vue&#39;),
      }
    ]
  }
];

router.beforeEach((to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => {
  const { cacheRouter } = useRoutersStore();
  cacheRouter(from, to);
  next();
});

キープアライブ コンポーネント ストレージ

src/ stroe /router.ts

import { RouteLocationNormalized } from &#39;vue-router&#39;;

const useRouterStore = defineStore(&#39;router&#39;, {
  state: () => ({
    cacheComps: new Set<string>(),
  }),
  actions: {
    cacheRouter(from: RouteLocationNormalized, to: RouteLocationNormalized) {
      if(
        Array.isArray(from.meta.leaveCaches) && 
        from.meta.leaveCaches.inclued(to.path) && 
        typeof from.name === &#39;string&#39;
      ) {
        this.cacheComps.add(form.name);
      }
      if(
        Array.isArray(to.meta.leaveCaches) && 
        !to.meta.leaveCaches.inclued(from.path) && 
        typeof to.name === &#39;string&#39;
      ) {
        this.cacheComps.delete(to.name);
      }
    },
  },
  getters: {
    keepAliveComps(state: State) {
      return [...state.cacheComps];
    },
  },
});

ページ キャッシュ

src/layout/index.vue

<template>
  <RouterView v-slot="{ Component }">
    <KeepAlive :include="keepAliveComps">
      <component :is="Component"/>
    </KeepAlive>
  </RouterView>
</template>

<script setup>
import { storeToRefs } from &#39;pinia&#39;;
import useRouterStore from &#39;@/store/router&#39;;

const { keepAliveComps } = storeToRefs(useRouterStore());
</script>

TypeScript提升配置体验

import &#39;vue-router&#39;;

export type LeaveCaches = string[];

declare module &#39;vue-router&#39; {
  interface RouteMeta {
    leaveCaches?: LeaveCaches;
  }
}

该方案的问题

  • 缺少通配符处理/*/**/index
  • 无法缓存/preview/:address这样的动态路由。
  • 组件名和路由名称必须保持一致。

总结

通过<routerview v-slot="{ Component }"></routerview>获取到当前路由对应的组件,在将该组件通过<component :is="Component"></component>渲染,渲染之前利用<keepalive :include="keepAliveComps"></keepalive>来过滤当前组件是否需要保活。 基于上述机制,通过简单的路由配置中的meta.leaveCaches = [...]来配置从当前路由出发到哪些路由时,需要缓存当前路由的内容。【推荐学习:《vue.js视频教程》】

如果大家有其他保活方案,欢迎留言交流哦!

以上が非常に快適な Vue ページ維持ソリューションを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はjuejinで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Vue.js vs. React:どのフレームワークがあなたに適していますか?Vue.js vs. React:どのフレームワークがあなたに適していますか?May 01, 2025 am 12:21 AM

Vue.JSは、高速開発や小規模プロジェクトに適していますが、Reactは大規模で複雑なプロジェクトにより適しています。 1.Vue.jsは簡単で学習しやすく、迅速な開発や小規模プロジェクトに適しています。 2.反応は強力で、大規模で複雑なプロジェクトに適しています。 3. Vue.jsの進歩的な特徴は、徐々に機能を導入するのに適しています。 4。複雑なUIおよびデータ集約型アプリケーションを扱うとき、Reactのコンポーネントと仮想DOMはうまく機能します。

Vue.js vs. React:JavaScriptフレームワークの比較分析Vue.js vs. React:JavaScriptフレームワークの比較分析Apr 30, 2025 am 12:10 AM

Vue.jsとReactには、それぞれ独自の利点と短所があります。選択するときは、チームのスキル、プロジェクトの規模、パフォーマンス要件を包括的に検討する必要があります。 1)VUE.JSは、学習曲線が低い高速開発や小規模プロジェクトに適していますが、ネストされたオブジェクトはパフォーマンスの問題を引き起こす可能性があります。 2)Reactは、豊富なエコシステムを備えた大規模で複雑なアプリケーションに適していますが、頻繁に更新するとパフォーマンスのボトルネックにつながる可能性があります。

Vue.js vs. React:ユースケースとアプリケーションVue.js vs. React:ユースケースとアプリケーションApr 29, 2025 am 12:36 AM

VUE.JSは中小企業から中規模のプロジェクトに適していますが、Reactは大規模なプロジェクトや複雑なアプリケーションシナリオに適しています。 1)Vue.jsは使いやすく、迅速なプロトタイピングや小規模アプリケーションに適しています。 2)Reactは、複雑な州の管理とパフォーマンスの最適化を処理する上でより多くの利点があり、大規模なプロジェクトに適しています。

Vue.js vs. React:パフォーマンスと効率の比較Vue.js vs. React:パフォーマンスと効率の比較Apr 28, 2025 am 12:12 AM

Vue.jsとReactにはそれぞれ独自の利点があります。Vue.jsは小さなアプリケーションと迅速な発展に適していますが、Reactは大規模なアプリケーションと複雑な国家管理に適しています。 1.Vue.jsは、小さなアプリケーションに適したレスポンシブシステムを通じて自動更新を実現します。 2.反応は、大規模で複雑なアプリケーションに適した仮想DOMおよびDIFFアルゴリズムを使用します。フレームワークを選択するときは、プロジェクトの要件とチームテクノロジースタックを検討する必要があります。

Vue.js vs. React:コミュニティ、エコシステム、およびサポートVue.js vs. React:コミュニティ、エコシステム、およびサポートApr 27, 2025 am 12:24 AM

Vue.jsとReactにはそれぞれ独自の利点があり、選択はプロジェクトの要件とチームテクノロジースタックに基づいている必要があります。 1。Vue.jsはコミュニティに優しいものであり、豊富な学習リソースを提供しており、エコシステムには公式チームとコミュニティによってサポートされているVuerouterなどの公式ツールが含まれています。 2. Reactコミュニティは、強力なエコシステムを備えたエンタープライズアプリケーションに偏っており、Facebookとそのコミュニティが提供するサポートを頻繁に更新しています。

React and Netflix:関係を探るReact and Netflix:関係を探るApr 26, 2025 am 12:11 AM

NetflixはReactを使用してユーザーエクスペリエンスを強化します。 1)Reactのコンポーネント機能は、Netflixが複雑なUIを管理可能なモジュールに分割するのに役立ちます。 2)Virtual DomはUIの更新を最適化し、パフォーマンスを向上させます。 3)ReduxとGraphQLを組み合わせて、Netflixはアプリケーションのステータスとデータフローを効率的に管理します。

vue.js vs.バックエンドフレームワーク:区別を明確にしますvue.js vs.バックエンドフレームワーク:区別を明確にしますApr 25, 2025 am 12:05 AM

Vue.jsはフロントエンドフレームワークであり、バックエンドフレームワークはサーバー側のロジックを処理するために使用されます。 1)VUE.JSは、ユーザーインターフェイスの構築に焦点を当て、コンポーネントおよびレスポンシブデータバインディングを介して開発を簡素化します。 2)ExpressやDjangoなどのバックエンドフレームワークは、HTTPリクエスト、データベース操作、ビジネスロジックを処理し、サーバーで実行します。

vue.jsとフロントエンドスタック:接続の理解vue.jsとフロントエンドスタック:接続の理解Apr 24, 2025 am 12:19 AM

VUE.JSは、開発効率とユーザーエクスペリエンスを向上させるために、フロントエンドテクノロジースタックと密接に統合されています。 1)建設ツール:Webpackおよびロールアップと統合して、モジュール開発を実現します。 2)国家管理:VUEXと統合して、複雑なアプリケーションステータスを管理します。 3)ルーティング:Vuerouterと統合して、単一ページのアプリケーションルーティングを実現します。 4)CSSプリプロセッサ:SASSをサポートし、スタイル開発効率を改善するために少なくなります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール