亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ホームページ ウェブフロントエンド フロントエンドQ&A Vue が非同期コンポーネントを使用するのはなぜですか?

Vue が非同期コンポーネントを使用するのはなぜですか?

Dec 13, 2022 pm 07:11 PM
vue 非同期コンポーネント

非同期コンポーネントを使用する理由: 1. 非同期コンポーネントは、パッケージ化結(jié)果を削減し、非同期コンポーネントを個別にパッケージ化し、コンポーネントを非同期的にロードすることができるため、大きすぎるコンポーネントの問題を効果的に解決できます。 2. 非同期コンポーネントのコアは関數(shù)として定義でき、関數(shù)內(nèi)でインポート構(gòu)文を使用してファイルの分割ロードを?qū)g現(xiàn)できます。

Vue が非同期コンポーネントを使用するのはなぜですか?

#このチュートリアルの動作環(huán)境: Windows7 システム、vue3 バージョン、DELL G3 コンピューター。

非同期コンポーネントを使用する理由

1. 非同期コンポーネントにより、パッケージ化の結(jié)果が低下する可能性があります。非同期コンポーネントは個別にパッケージ化され、コンポーネントは非同期でロードされるため、大きすぎるコンポーネントの問題を効果的に解決できます。非同期コンポーネントを使用しない場合、コンポーネントの機(jī)能が増えると、パッケージ化された結(jié)果が大きくなります。

2. 非同期コンポーネントのコアは関數(shù)として定義できます。関數(shù)內(nèi)でインポート構(gòu)文を使用してファイルの分割読み込みを?qū)g現(xiàn)できます。インポート構(gòu)文は webpack によって提供され、jsonp を使用します。 (學(xué)習(xí)ビデオ共有:

vuejs 入門チュートリアル基本プログラミング ビデオ)

components:{
  VideoPlay:(resolve)=>import("../components/VideoPlay")
}
 
components:{
  VideoPlay(resolve) {
    require(["../components/VideoPlay"], resolve)
  }
}
 
或者使用回調(diào)函數(shù)

Principle

createComponent メソッドには、対応する非同期コンポーネントがあります。処理としては、まずasyncFactory変數(shù)を定義してから判斷し、コンポーネントが関數(shù)の場合はresolveAsyncComponentメソッドを呼び出し、asyncFactoryに割り當(dāng)てられた関數(shù)を渡すことでasyncFactoryを?qū)g行します。結(jié)果として、非同期であるため、Promise が返されます。このとき、値は未定義であり、非同期コンポーネントのプレースホルダーである空の仮想ノードが最初にレンダリングされます。ロード後、ファクトリ関數(shù)が呼び出され、2 つのパラメータのsolveとrejectを渡します。実行後、成功したコールバックと失敗したコールバックが返されます。Promiseが成功した場合は、resolveが呼び出されます。forceRenderメソッドは次のようになります。ビューの更新と再レンダリングを強(qiáng)制するために、solve で呼び出されます。forceRender で呼び出されるのは $forceUpdate で、その結(jié)果は Factory.resolved に置かれます。更新が強(qiáng)制される場合、resolveAsyncComponent メソッドが再度使用されます。今回は判定があり、結(jié)果が成功した場合は結(jié)果がそのまま戻されますが、このときresolveAsyncComponentの戻り値は未定義ではなく、コンポーネントの作成、初期化、レンダリングが行われます。

ソース コード

src/core/vdom/create-component.js

1.createComponent メソッド

export function createComponent (
  Ctor: Class<Component> | Function | Object | void,
  data: ?VNodeData,
  context: Component,
  children: ?Array<VNode>,
  tag?: string
): VNode | Array<VNode> | void {
  let asyncFactory
  if (isUndef(Ctor.cid)) { // 看組件是否是一個函數(shù)
    asyncFactory = Ctor // 異步組件一定是一個函數(shù) 新版本提供了對象的寫法
    Ctor = resolveAsyncComponent(asyncFactory, baseCtor) //默認(rèn)調(diào)用此函數(shù)時返回undefiend
    // 第二次渲染時Ctor不為undefined
    if (Ctor === undefined) {
      //返回async組件的占位符節(jié)點(diǎn)
      //作為注釋節(jié)點(diǎn),但保留該節(jié)點(diǎn)的所有原始信息
      //該信息將用于異步服務(wù)器渲染和水合。
      return createAsyncPlaceholder(
        asyncFactory,
        data,
        context,
        children,
        tag
      )
    }
  }
}

2.resolveAsyncComponent メソッド

export function resolveAsyncComponent (
  factory: Function,
  baseCtor: Class<Component>
): Class<Component> | void {
  // 如果有錯誤就返回錯誤結(jié)果
  if (isTrue(factory.error) && isDef(factory.errorComp)) {
    return factory.errorComp
  }
  // 再次渲染時可以拿到獲取的最新組件
  // 如果有成功的結(jié)果,就直接返回去
  if (isDef(factory.resolved)) {
    return factory.resolved
  }

  if (owner && !isDef(factory.owners)) {
    // forceRender 強(qiáng)制刷新渲染
    const forceRender = (renderCompleted: boolean) => {
      for (let i = 0, l = owners.length; i < l; i++) {
        (owners[i]: any).$forceUpdate() // 執(zhí)行$forceUpdate
      }
    }
    // 成功
    const resolve = once((res: Object | Class<Component>) => {
      factory.resolved = ensureCtor(res, baseCtor)
      if (!sync) {
        forceRender(true) // 執(zhí)行強(qiáng)制更新視圖重新渲染方法
      } else {
        owners.length = 0
      }
    })
    // 失敗
    const reject = once(reason => {
      if (isDef(factory.errorComp)) {
        factory.error = true
        forceRender(true)
      }
    })

    // 執(zhí)行factory 將resolve方法和reject方法傳入
    const res = factory(resolve, reject)

    sync = false
    return factory.loading ? factory.loadingComp : factory.resolved // 返回結(jié)果
  }
}

3.createAsyncPlaceholder メソッド

// 創(chuàng)建一個異步組件的占位,空虛擬節(jié)點(diǎn)   也就是一個注釋<!-->
export function createAsyncPlaceholder (
  factory: Function,
  data: ?VNodeData,
  context: Component,
  children: ?Array<VNode>,
  tag: ?string
): VNode {
  const node = createEmptyVNode()
  node.asyncFactory = factory
  node.asyncMeta = { data, context, children, tag }
  return node
}

(學(xué)習(xí)ビデオ共有:

vuejs 入門チュートリアル 、基本プログラミング ビデオ )

以上がVue が非同期コンポーネントを使用するのはなぜですか?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

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

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

完全なPython Webアプリケーションを開発する方法は? 完全なPython Webアプリケーションを開発する方法は? May 23, 2025 pm 10:39 PM

完全なPython Webアプリケーションを開発するには、次の手順に従ってください。1。DjangoやFlaskなどの適切なフレームワークを選択します。 2。データベースを統(tǒng)合し、Sqlalchemyなどの軌道を使用します。 3.フロントエンドを設(shè)計(jì)し、VueまたはReactを使用します。 4.テストを?qū)g行し、pytestまたはunittestを使用します。 5.アプリケーションを展開し、HerokuやAWSなどのDockerとプラットフォームを使用します。これらの手順を通じて、強(qiáng)力で効率的なWebアプリケーションを構(gòu)築できます。

laravel vue.jsシングルページアプリケーション(SPA)チュートリアル laravel vue.jsシングルページアプリケーション(SPA)チュートリアル May 15, 2025 pm 09:54 PM

シングルページアプリケーション(SPA)は、Laravelとvue.jsを使用して構(gòu)築できます。 1)LaravelでAPIルーティングとコントローラーを定義して、データロジックを処理します。 2)vue.jsでコンポーネントのフロントエンドを作成して、ユーザーインターフェイスとデータインタラクションを?qū)g現(xiàn)します。 3)corsを構(gòu)成し、データインタラクションにaxiosを使用します。 4)Vuerouterを使用してルーティング管理を?qū)g裝し、ユーザーエクスペリエンスを向上させます。

WordPressのフロントエンドとバックエンドを分離する方法 WordPressのフロントエンドとバックエンドを分離する方法 Apr 20, 2025 am 08:39 AM

WordPressのフロントエンドとバックエンドを分離するときに、ネイティブコードを直接変更することはお勧めしません?!父纳皮丹欷糠蛛x」により適しています。 REST APIを使用してデータを取得し、フロントエンドフレームワークを使用してユーザーインターフェイスを構(gòu)築します。バックエンドに保持されているAPIを介して呼び出される関數(shù)とキャンセルできる機(jī)能を特定します。ヘッドレスのWordPressモードにより、より徹底的な分離が可能になりますが、より費(fèi)用対効果が高く、開発が困難です。セキュリティとパフォーマンスに注意し、API応答速度とキャッシュを最適化し、WordPress自體を最適化します。関數(shù)を徐々に移行し、バージョン制御ツールを使用してコードを管理します。

フロントエンドルーティングの作業(yè)と構(gòu)成方法(Vueルーター、Reactルーター)? フロントエンドルーティングの作業(yè)と構(gòu)成方法(Vueルーター、Reactルーター)? May 20, 2025 pm 07:18 PM

フロントエンドルーティングシステムのコアは、URLをコンポーネントにマッピングすることです。 VuerouterとReactrouterは、URLの変更をリスニングし、対応するコンポーネントを読み込むことにより、更新されないページの切り替えを?qū)g現(xiàn)します。構(gòu)成方法には、次のものが含まれます。1。ネストされたルーティング、親コンポーネントのネストされた子コンポーネントを許可します。 2。動的ルーティング、URLパラメーターに従って異なるコンポーネントのロード。 3.ルートガード、ルートスイッチングの前後の許可チェックなどのロジックを?qū)g行します。

Vueの反応性変換(実験、削除)とその目標(biāo)の重要性は何ですか? Vueの反応性変換(実験、削除)とその目標(biāo)の重要性は何ですか? Jun 20, 2025 am 01:01 AM

ReactivitytransforminVue3aimedtosimplifyhandlingreactivedatabyautomaticallytrackingandmanagingreactivitywithoutrequiringmanualref()or.valueusage.Itsoughttoreduceboilerplateandimprovecodereadabilitybytreatingvariableslikeletandconstasautomaticallyreac

VUE 3のは、非同期コンポーネントとその荷重狀態(tài)の管理にどのように役立ちますか? VUE 3のは、非同期コンポーネントとその荷重狀態(tài)の管理にどのように役立ちますか? Jun 10, 2025 am 12:07 AM

suspenseinvue3simplifieshhandlingynccomponents bymanaging loadingStatesEndintegratingErrorhandling.1.itwrapsasynccontentanddisplays displays fallbackContentlikesnnersuntinuntinuntiltheComponentload.2.youdefineasynccomponentsusingsingsingdefineasynconcentandwraptheminaspe

コンポーネント開発におけるVue.jsとReactのコアの違いは何ですか? コンポーネント開発におけるVue.jsとReactのコアの違いは何ですか? May 21, 2025 pm 08:39 PM

コンポーネント開発におけるVue.jsとReactのコアの違いは次のとおりです。1)Vue.jsはテンプレートの構(gòu)文とオプションAPIを使用し、ReactはJSXと機(jī)能コンポーネントを使用します。 2)Vue.jsはレスポンシブシステムを使用し、Reactは不変のデータと仮想DOMを使用します。 3)Vue.jsは複數(shù)のライフサイクルフックを提供し、Reactはより多くの使用Effectフックを使用します。

VUEアプリケーションで國際化(I18N)とローカリゼーション(L10N)をどのように実裝できますか? VUEアプリケーションで國際化(I18N)とローカリゼーション(L10N)をどのように実裝できますか? Jun 20, 2025 am 01:00 AM

Internationalization andLocalizationInvueappsareprimalyally Handusingthevuei18nplugin.1.installvue-i18nvianpmoryarn.2.createLocalejsonfiles(例えば、en.json、es.json)for translationmessages.3.セクタイズ

See all articles