Vue3系列10--非同步組件&代碼分包&suspense

来源:https://www.cnblogs.com/lotusflower/archive/2022/08/09/16559776.html
-Advertisement-
Play Games

非同步組件 在大型應用中,我們可能需要將應用分割成小一些的代碼塊 並且減少主包的體積,這時候就可以使用非同步組件 頂層 await:在setup語法糖裡面 使用方法,<script setup> 中可以使用頂層 await。結果代碼會被編譯成 async setup() 在項目進行打包後 會生成打包後的 ...


非同步組件

在大型應用中,我們可能需要將應用分割成小一些的代碼塊 並且減少主包的體積,這時候就可以使用非同步組件

頂層 await:在setup語法糖裡面 使用方法,<script setup> 中可以使用頂層 await。結果代碼會被編譯成 async setup()

在項目進行打包後 會生成打包後的文件:

dist/index.html  程式入口 
dist/assets/index.e0b7c3a3.css 
dist/assets/index.c3955c07.js  主邏輯

在用戶訪問的時候,會載入index.html,html回去載入index.c3955c07.js ,如果這個文件太大,就會出現白屏。可以通過非同步組件來優化。

(1)在public\data.json

[
    {
        "name":"模擬後端介面1"
    },
    {
        "name":"模擬後端介面2"
    },
    {
        "name":"模擬後端介面3"
    },
    {
        "name":"模擬後端介面4"
    }
]

(2)src\components\A\server.ts建立請求介面

type NameList = {
    name: string
}

export const axios = (url: string): Promise<NameList[]> => { //傳入url,返回NameList數組
    return new Promise((resolve) => {
        let xhl: XMLHttpRequest = new XMLHttpRequest() // 去調用介面
        xhl.open('GET', url) // 獲取數據
        xhl.onreadystatechange = () => { // 變化的時候就調用
            if (xhl.readyState === 4 && xhl.status) { // 調用完成,且介面正常
                setTimeout(() => {
                    resolve(JSON.parse(xhl.responseText)) // 返回的格式
                }, 2000);
            }
        }
        xhl.send(null) //發送數據
    })
}

(3)在src\components\A\index.vue文件

<template>
    <div>
        我是組件A
        <div :key="item.name" v-for="item in list">
            {{item.name}}
        </div>
    </div>
</template>


<script setup lang="ts">
import { axios } from './server';
const list = await axios('./data.json')
console.log(list)

</script>


<style scoped lang="less">

</style>

(4)在src\App.vue引用

<template>
  <div>
    <Suspense>
      <template #default>
        <!-- 組件載入完成時候調用 -->
        <A></A>
      </template>
      <template #fallback>
        <!-- 組件載入的時候調用,載入完成後就會替換掉 -->
        <div>
          loading...
        </div>
      </template>
    </Suspense>
  </div>
</template>

<script setup lang="ts">
// import A from './components/A/index.vue'  // 改成非同步組件,不能這麼引入,數據顯示不出來
import { ref, defineAsyncComponent } from 'vue'
const name = ref<string>('header')

const A = defineAsyncComponent(() => import('./components/A/index.vue'))  // 引入後,還需要配合suspense使用
// 只能通過import函數形式引入,單遇到awite的時候,把我們的邏輯拆分出去,打包的時候就多包
</script>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言: 今天有個業務需求,需要將用戶的密碼統一進行設置,現在只有用戶的昵稱(nickname), 用戶的username跟password欄位為空。遂就用到了中文轉拼音~ 1、先將nickname轉拼音並賦值給username欄位 2、使用username欄位配合加密函數,對該用戶的密碼進行賦值 - ...
  • 好消息!國際權威行業研究與咨詢機構Forrester發佈全球Translytical數據平臺廠商選型報告《The Translytical Data Platforms Landscape, Q3 2022》,騰訊雲資料庫成功入選。 Forrester是全球最具影響力的獨立第三方研究咨詢公司之一,提 ...
  • 有讀者可能會一臉懵逼? 啥是索引潛水? 你給起的名字的嗎?有沒有索引蛙泳? 這個名字還真不是我起的,今天要講的知識點就叫索引潛水(Index dive)。 先要從一件怪事說起: ...
  • 定義: 刪除數據表就是將資料庫中已經存在的表從資料庫中刪除。註意,在刪除表的同時,表的定義和表中所有的數據均會被刪除。因此,在進行刪除操作前,最好對錶中的數據做一個備份,以免造成無法輓回的後果。本節將詳細講解資料庫表的刪除方法。 1 刪除一個或多個沒有被其他表關聯的數據表 如果一個數據表沒有和其它表 ...
  • 一.自定義組件 1.1 組件的創建與引用 首先創建組件 然後我們組件的引用分為局部和全局引用 局部引用就是在當前頁面能使用,在當前頁面的json文件裡面配置 全局引用同樣的道理,==註意跟page等是同級的== 組件與頁面的不同: 雖然都有相應的四個文件 1.2 組件樣式 首先,預設情況下 ==組件 ...
  • 疫情期間,很多線下活動轉為線上舉行,實時音視頻的需求劇增,在視頻會議,線上教育,電商購物等眾多場景成了“生活新常態”。 本文將教你如何通過即構ZEGO 音視頻 SDK 在Android端搭建實時視頻通話能力。即構音視頻SDK提供100+種行業解決方案,RTC 每月贈送10000分鐘免費時長,提供免費 ...
  • 誰說程式員不懂浪漫? 作為程式員,用自己的代碼本事手搓一個技術感十足的驚喜,我覺得,這是不亞於車馬慢時代手寫信的古典主義浪漫。 那麼,應該怎樣創作出具有自我身份屬性的浪漫驚喜呢? 玩法很多,今天給大家介紹一個不出錯的技術控浪漫實操方式——煙花粒子動畫,在虛擬空間為對方造一個漫天煙花,平行時空的浪漫, ...
  • cookie是什麼 cookie 也叫 HTTPCookie,是客戶端與伺服器端進行會話(session)使用的一個能夠在瀏覽器本地化存儲的技術。 cookie就是為了存儲 sessionID而誕生. cookie的特性,會隨著請求自動攜帶cookie的值到伺服器 cookie的作用 cookie的 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...