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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...