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

目錄
使用非同步元件的原因
原理
原始碼
首頁 web前端 前端問答 vue為啥要使用非同步組件

vue為啥要使用非同步組件

Dec 13, 2022 pm 07:11 PM
vue 非同步組件

使用非同步元件的原因:1、非同步元件可以減少打包的結(jié)果,會將非同步元件分開打包,會採用非同步的方式載入元件,可以有效的解決一個元件過大的問題。 2.非同步元件的核心可以給元件定義變成函數(shù),函數(shù)裡面可以用import語法,實作檔案的分割載入。

vue為啥要使用非同步組件

本教學(xué)操作環(huán)境:windows7系統(tǒng)、vue3版,DELL G3電腦。

使用非同步元件的原因

1.非同步元件可以減少打包的結(jié)果。會將非同步元件分開打包,會採用非同步的方式載入元件,可以有效的解決一個元件過大的問題。不使用非同步組件,如果組件功能比較多打包出來的結(jié)果就會變大。

2.非同步元件的核心可以給元件定義變成函數(shù),函數(shù)裡面可以用import語法,實作檔案的分割載入,import語法是webpack提供的,採用的就是jsonp。 (學(xué)習(xí)影片分享:vuejs入門教學(xué)、程式設(shè)計基礎(chǔ)影片

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

原理

在createComponent方法中,會有對應(yīng)的非同步元件處理,先定義一個asyncFactory變量,然後進行判斷,如果組件是一個函數(shù),然後會去調(diào)resolveAsyncComponent方法,然後將賦值在asyncFactory上的函數(shù)傳進去,會讓asyncFactory馬上執(zhí)行,執(zhí)行的時候並不會馬上返回結(jié)果,因為他是異步的,回傳的是一個promise,這時候這個值就是undefined,然後就會先渲染一個非同步元件的佔位,空虛擬節(jié)點。如果載入完之後會調(diào)factory函數(shù)傳入resolve和reject兩個參數(shù),執(zhí)行後傳回一個成功的回呼與失敗的回呼,promise成功了就會調(diào)resolve,resolve中就會調(diào)取forceRender方法強制更新視圖重新渲染,forceRender中調(diào)取的就是$forceUpdate,同時把結(jié)果放到factory.resolved上,如果強制刷新的時候就會再次走resolveAsyncComponent方法,這時候有個判斷,如果有成功的結(jié)果就把結(jié)果直接放回去,這時候resolveAsyncComponent回傳的就不是undefined了,就會接的建立元件,初始化元件,渲染元件。

原始碼

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) //默認調(diào)用此函數(shù)時返回undefiend
    // 第二次渲染時Ctor不為undefined
    if (Ctor === undefined) {
      //返回async組件的占位符節(jié)點
      //作為注釋節(jié)點,但保留該節(jié)點的所有原始信息
      //該信息將用于異步服務(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 強制刷新渲染
    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í)行強制更新視圖重新渲染方法
      } 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é)點   也就是一個注釋<!-->
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入門教學(xué)、程式設(shè)計基礎(chǔ)影片

以上是vue為啥要使用非同步組件的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

怎樣開發(fā)一個完整的PythonWeb應(yīng)用程序? 怎樣開發(fā)一個完整的PythonWeb應(yīng)用程序? May 23, 2025 pm 10:39 PM

要開發(fā)一個完整的PythonWeb應(yīng)用程序,應(yīng)遵循以下步驟:1.選擇合適的框架,如Django或Flask。 2.集成數(shù)據(jù)庫,使用ORM如SQLAlchemy。 3.設(shè)計前端,使用Vue或React。 4.進行測試,使用pytest或unittest。 5.部署應(yīng)用,使用Docker和平臺如Heroku或AWS。通過這些步驟,可以構(gòu)建出功能強大且高效的Web應(yīng)用。

vscode如何啟動vue項目 vscode如何啟動vue項目 Apr 16, 2025 am 06:15 AM

在 VSCode 中啟動 Vue.js 項目需要以下步驟:安裝 Vue.js CLI創(chuàng)建新項目安裝依賴項在終端啟動項目在 VSCode 中打開項目在 VSCode 中再次運行項目

Laravel   Vue.js 開發(fā)單頁面應(yīng)用(SPA)教程 Laravel Vue.js 開發(fā)單頁面應(yīng)用(SPA)教程 May 15, 2025 pm 09:54 PM

使用Laravel和Vue.js可以構(gòu)建單頁面應(yīng)用(SPA)。 1)在Laravel中定義API路由和控制器,處理數(shù)據(jù)邏輯。 2)在Vue.js中創(chuàng)建組件化前端,實現(xiàn)用戶界面和數(shù)據(jù)交互。 3)配置CORS和使用axios進行數(shù)據(jù)交互。 4)利用VueRouter實現(xiàn)路由管理,提升用戶體驗。

vscode如何調(diào)試vue項目 vscode如何調(diào)試vue項目 Apr 16, 2025 am 07:00 AM

在 VS Code 中調(diào)試 Vue 項目的步驟:運行項目:npm run serve 或 yarn serve打開調(diào)試器:F5 或“啟動調(diào)試”按鈕選擇“Vue: 附加到 Chrome”配置附加到瀏覽器:VS Code 自動附加到 Chrome 中運行的項目設(shè)置斷點啟動調(diào)試:F5 或“啟動調(diào)試”按鈕逐步調(diào)試:使用調(diào)試工具欄按鈕逐步執(zhí)行代碼檢查變量:“監(jiān)視”窗口

vscode如何配置vue vscode如何配置vue Apr 16, 2025 am 07:06 AM

如何配置 VSCode 以編寫 Vue:安裝 Vue CLI 和 VSCode Vue 插件。創(chuàng)建一個 Vue 項目。設(shè)置語法高亮顯示、linting、自動格式化和代碼段。安裝 ESLint 和 Prettier 以增強代碼質(zhì)量。集成 Git(可選)。配置完成後,VSCode 已準備好進行 Vue 開發(fā)。

wordpress怎麼做前後端分離 wordpress怎麼做前後端分離 Apr 20, 2025 am 08:39 AM

將 WordPress 前後端分離不建議直接改造原生代碼,更適合“改良式分離”。利用 REST API 獲取數(shù)據(jù),使用前端框架構(gòu)建用戶界面。甄別哪些功能通過 API 調(diào)用,哪些保留在後端,哪些可取消。 Headless WordPress 模式可實現(xiàn)更徹底的分離,但開發(fā)成本和難度較高。注意安全和性能,優(yōu)化 API 響應(yīng)速度和緩存,並優(yōu)化 WordPress 本身。逐步遷移功能,使用版本控制工具管理代碼。

vscode如何運行vue vscode如何運行vue Apr 16, 2025 am 07:39 AM

在 VSCode 中運行 Vue 項目需要以下步驟:1. 安裝 Vue CLI;2. 創(chuàng)建 Vue 項目;3. 切換到項目目錄;4. 安裝項目依賴;5. 運行開發(fā)服務(wù)器;6. 打開瀏覽器訪問 http://localhost:8080。

如何將??低晹z像頭SDK的視頻流推送到前端Vue項目中進行實時播放? 如何將??低晹z像頭SDK的視頻流推送到前端Vue項目中進行實時播放? Apr 19, 2025 pm 07:42 PM

如何將??低晹z像頭SDK的視頻流推送到前端Vue項目?在開發(fā)過程中,經(jīng)常會遇到需要將攝像頭捕獲的視頻流傳...

See all articles