目次
1. はじめに
1-1. 3 つの変更:
1-2 を返す必要があります。補助関数defineAsyncComponentを導入した理由:
2. Vue 2.x と Vue 3.x 定義の比較
2-1. 非同期コンポーネント/ルーティング定義の比較
ホームページ ウェブフロントエンド Vue.js vue3 vite 非同期コンポーネントとルーティングの遅延読み込みを適用する方法

vue3 vite 非同期コンポーネントとルーティングの遅延読み込みを適用する方法

May 18, 2023 pm 04:52 PM
vue3 vite

1. はじめに

1-1. 3 つの変更:

  • 非同期コンポーネント宣言メソッドの変更: Vue 3.x では、新しい補助関数defineAsyncComponent が追加されています。非同期コンポーネントの宣言を表示するために使用されます

  • 非同期コンポーネントの詳細宣言メソッドのコンポーネント オプションの名前がloaderに変更されました

  • コンポーネントの読み込みローダーによってバインドされた関数は、解決パラメータと拒否パラメータを受け取りません。そして、Promise

1-2 を返す必要があります。補助関数defineAsyncComponentを導入した理由:

Now , Vue 3 では、コンポーネントは純粋な関数として定義される関数のため、非同期コンポーネントの定義は新しいdefineAsyncComponent ヘルパーでラップすることによって明示的に定義する必要があります。

2. Vue 2.x と Vue 3.x 定義の比較

2-1. 非同期コンポーネント/ルーティング定義の比較

  • ##2- 1 -1. Vue 2.x では、次のように非同期コンポーネントを宣言するだけです:

  • const asyncPage = () => import('./views/home.vue')
    ログイン後にコピー
    ログイン後にコピー
  • 2-1-2. Vue 3.x では、非同期コンポーネントのインポートには、補助関数defineAsyncComponentを使用した明示的な宣言が必要です。

  • <template>
      <div>
        <h2>Async Components</h2>
        <p>异步组件测试</p>
        <child />
      </div>
    </template>
    <script>
    import { defineAsyncComponent } from &#39;vue&#39;
    const child = defineAsyncComponent(() => import(&#39;@/components/async-component-child.vue&#39;))
    export default {
      name: &#39;async-components&#39;,
      components:{
        &#39;child&#39;: child
      }
    };
    </script>
    ログイン後にコピー
2-2. 宣言方法の比較

  • 2-2-1. Vue 2 の非同期コンポーネントの宣言.x は、より高度な宣言方法です。次のように:

  • const asyncPageWithOptions  = {
      component: () => import(&#39;./views/home.vue&#39;),
      delay: 200,
      timeout: 3000,
      error: ErrorComponent,
      loading: LoadingComponent
    }
    ログイン後にコピー
したがって、次の非同期コンポーネント宣言:

const asyncPage = () => import(&#39;./views/home.vue&#39;)
ログイン後にコピー
ログイン後にコピー

は次と同等です:

const asyncPageWithOptions  = {
  component: () => import(&#39;./views/home.vue&#39;)
}
ログイン後にコピー

  • 2- 2 -2. Vue 3.x では、非同期コンポーネントもこのように宣言できます。コンポーネントをローダーに変更するだけで済みます。次のように:

  • const asyncPageWithOptions  = defineAsyncComponent({
      loader: () => import(&#39;./views/home.vue&#39;),
      delay: 200,
      timeout: 3000,
      error: ErrorComponent,
      loading: LoadingComponent
    })
    ログイン後にコピー
2-3. 非同期コンポーネント読み込み関数は比較を返します

  • 2-3-1. Vue 2.x で受信解決と拒否:

  • // 2.x version
    const oldAsyncComponent = (resolve, reject) => {
      /* ... */
    }
    ログイン後にコピー
  • 2-3-2.Vue 3.x では常に Promise:

  • // 3.x version
    const asyncComponent = defineAsyncComponent(
      () => new Promise((resolve, reject) => {
          /* ... */
      })
    )
    ログイン後にコピー
Vue 3.x の非同期コンポーネント読み込み関数は、解決と拒否を受け取らなくなり、常に Promise を返す必要があります。つまり、Vue 3.x では、ファクトリ関数を介して解決コールバックを受信して​​非同期コンポーネントを定義することはサポートされなくなりました。

// 在 Vue 3.x 中不适用
export default {
  components: {
    asyncPage: resolve => require([&#39;@/components/list.vue&#39;], resolve)
  },
}
ログイン後にコピー

3. Vue3 の実践

ヒント: Vite ツールを使用してプロジェクトをビルドする場合は、インポートを使用して、ローカル開発中にルーティング遅延ロードを実行します。正常にロードできますが、警告が表示されます。報告される; 本番環境にパッケージ化する 環境によってエラーが報告され、ページが正常に表示されなくなります。これを実現するには、次の 2 つの方法を使用できます。

3-1. ルーティング遅延読み込みの実装

  • 3-1-1.defineAsyncComponent メソッド

  • // router/index.js
    import { defineAsyncComponent } from &#39;vue&#39;
    const _import = (path) => defineAsyncComponent(() => import(`../views/${path}.vue`));
    const routes = [
      {
        path: &#39;/async-component&#39;,
        name: &#39;asyncComponent&#39;,
        component: _import(&#39;home&#39;),
      }
    ];
    ログイン後にコピー
  • 3-1-2.import.meta.glob メソッド

  • // 1.上面的方法相当于一次性加载了 views 目录下的所有.vue文件,返回一个对象
    const modules = import.meta.glob(&#39;../views/*/*.vue&#39;);
    const modules ={
        "../views/about/index.vue": () => import("./src/views/about/index.vue")
    }
    // 2.动态导入的时候直接,引用
    const router = createRouter({
      history: createWebHistory(),
      routes: [
        // ...
        {
          path: &#39;xxxx&#39;,
          name: &#39;xxxxx&#39;,
          // 原来的方式,这个在开发中可行,但是生产中不行
          // component: () => import(`../views${menu.file}`),
          // 改成下面这样
          component: modules[`../views${filename}`]
        }
        // ...          
      ],
    })
    ログイン後にコピー
3-2.非同期コンポーネントの実装

<template>
  <div>
    <h2>Async Components</h2>
    <p>异步组件测试</p>
    <child></child>
  </div>
</template>
<script>
import { defineAsyncComponent } from &#39;vue&#39;
const child = defineAsyncComponent(() => import(&#39;@/components/async-component-child.vue&#39;))
export default {
  name: &#39;async-components&#39;,
  components:{
    &#39;child&#39;: child
  }
};
</script>
ログイン後にコピー

以上がvue3 vite 非同期コンポーネントとルーティングの遅延読み込みを適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue3+TS+Vite 開発スキル: SEO を最適化する方法 Vue3+TS+Vite 開発スキル: SEO を最適化する方法 Sep 10, 2023 pm 07:33 PM

Vue3+TS+Vite 開発スキル: SEO 最適化の実行方法 SEO (SearchEngineOptimization) とは、Web サイトの構造、コンテンツ、キーワードを最適化して検索エンジンで上位にランク付けし、それによって Web サイトのトラフィックと露出を増やすことを指します。 Vue3+TS+Viteなどの最新のフロントエンド技術の開発において、SEOをいかに最適化するかは非常に重要な問題です。この記事では、Vue3+TS+Vite の開発テクニックとそのための方法をいくつか紹介します。

vue3+vite: src に画像を動的にインポートするために require を使用するときのエラーを解決する方法 vue3+vite: src に画像を動的にインポートするために require を使用するときのエラーを解決する方法 May 21, 2023 pm 03:16 PM

vue3+vite:src は、イメージとエラー レポートと解決策を動的にインポートするために require を使用します。vue3+vite は複数のイメージを動的にインポートします。vue3。TypeScript 開発を使用している場合、イメージを導入するために require のエラー メッセージが表示されます。requireisnotdefined は使用できません。 vue2 のような imgUrl:require(' .../assets/test.png') は、typescript が require をサポートしていないため、インポートされます。そのため、import が使用されます。解決方法は次のとおりです: awaitimport を使用します

Vue3 でページの部分的なコンテンツを更新する方法 Vue3 でページの部分的なコンテンツを更新する方法 May 26, 2023 pm 05:31 PM

ページの部分的な更新を実現するには、ローカル コンポーネント (dom) の再レンダリングを実装するだけで済みます。 Vue でこの効果を実現する最も簡単な方法は、v-if ディレクティブを使用することです。 Vue2 では、v-if 命令を使用してローカル dom を再レンダリングすることに加えて、新しい空のコンポーネントを作成することもできます。ローカル ページを更新する必要がある場合は、この空のコンポーネント ページにジャンプしてから、再びジャンプします。 beforeRouteEnter ガードを空白のコンポーネントに配置します。元のページ。以下の図に示すように、Vue3.X の更新ボタンをクリックして赤枠内の DOM を再読み込みし、対応する読み込みステータスを表示する方法を示します。 Vue3.X の scriptsetup 構文のコンポーネントのガードには o しかないので、

Vue3+TS+Vite 開発スキル: フロントエンドのセキュリティ保護を実行する方法 Vue3+TS+Vite 開発スキル: フロントエンドのセキュリティ保護を実行する方法 Sep 09, 2023 pm 04:19 PM

Vue3+TS+Vite 開発スキル: フロントエンドのセキュリティ保護を実行する方法 フロントエンド テクノロジの継続的な開発に伴い、ますます多くの企業や個人がフロントエンド開発に Vue3+TS+Vite を使用し始めています。しかし、それに伴うセキュリティリスクも人々の注目を集めています。この記事では、いくつかの一般的なフロントエンド セキュリティの問題について説明し、Vue3+TS+Vite の開発プロセス中にフロントエンド セキュリティを保護する方法に関するいくつかのヒントを共有します。入力の検証 ユーザー入力は、多くの場合、フロントエンドのセキュリティ脆弱性の主な原因の 1 つです。存在する

Vue3+TS+Vite 開発スキル: クロスドメイン リクエストとネットワーク リクエストを最適化する方法 Vue3+TS+Vite 開発スキル: クロスドメイン リクエストとネットワーク リクエストを最適化する方法 Sep 09, 2023 pm 04:40 PM

Vue3+TS+Vite 開発スキル: クロスドメイン リクエストとネットワーク リクエストを最適化する方法 はじめに: フロントエンド開発では、ネットワーク リクエストは非常に一般的な操作です。ネットワーク リクエストを最適化してページの読み込み速度とユーザー エクスペリエンスを向上させる方法は、開発者が考慮する必要がある問題の 1 つです。同時に、異なるドメイン名にリクエストを送信する必要がある一部のシナリオでは、クロスドメインの問題を解決する必要があります。この記事では、Vue3+TS+Vite 開発環境でクロスドメイン リクエストを行う方法とネットワーク リクエストの最適化テクニックを紹介します。 1. クロスドメインリクエストソリューション

Vue3 がマークダウンを解析し、コードのハイライトを実装する方法 Vue3 がマークダウンを解析し、コードのハイライトを実装する方法 May 20, 2023 pm 04:16 PM

Vue はブログ フロントエンドを実装しており、マークダウン解析を実装する必要があり、コードがある場合はコードのハイライトを実装する必要があります。 Vue には、markdown-it、vue-markdown-loader、marked、vue-markdown など、マークダウン解析ライブラリが多数あります。これらのライブラリはすべて非常に似ています。ここではMarkedが使用され、コード強調表示ライブラリとしてhighlight.jsが使用されます。 1. 依存ライブラリをインストールする vue プロジェクトの下でコマンド ウィンドウを開き、次のコマンド npminstallmarked-save//marked を入力して、マークダウンを htmlnpmins に変換します。

Vue3+TS+Vite 開発スキル: データを暗号化して保存する方法 Vue3+TS+Vite 開発スキル: データを暗号化して保存する方法 Sep 10, 2023 pm 04:51 PM

Vue3+TS+Vite 開発のヒント: データを暗号化して保存する方法 インターネット技術の急速な発展に伴い、データ セキュリティとプライバシー保護がますます重要になっています。 Vue3+TS+Vite 開発環境では、データをどのように暗号化して保存するかが、すべての開発者が直面する必要がある問題です。この記事では、開発者がアプリケーションのセキュリティとユーザー エクスペリエンスを向上させるのに役立つ、一般的なデータ暗号化とストレージのテクニックをいくつか紹介します。 1. データ暗号化 フロントエンド データ暗号化 フロントエンド暗号化は、データ セキュリティを保護するための重要な部分です。よく使われる

vue3+ts+axios+pinia を使用して無意味なリフレッシュを実現する方法 vue3+ts+axios+pinia を使用して無意味なリフレッシュを実現する方法 May 25, 2023 pm 03:37 PM

vue3+ts+axios+pinia で無意味なリフレッシュを実現 1. まず、プロジェクト内の aiXos と pinianpmipinia をダウンロードします--savenpminstallaxios--save2. axios リクエストをカプセル化-----ダウンロード js-cookienpmiJS-cookie-s// aixosimporttype{AxiosRequestConfig , AxiosResponse}from"axios";importaxiosfrom'axios';import{ElMess

See all articles