【Vue3 實戰】插槽封裝與懶加載

一、為什么需要插槽?從一個面板組件說起

在電商首頁開發中,經常遇到這樣的場景:
「新鮮好物」「人氣推薦」同樣類型模塊都需要相同的標題欄,但內容區布局不同
這時候,插槽(Slot)就像一個「內容拼圖位」,讓組件既能統一樣式,又能靈活定制。

實戰案例:HomePanel 通用面板

<template><div class="home-panel"><div class="head"><h3>{{ title }}<small>{{ subTitle }}</small></h3></div><slot name="main" /> <!-- 內容拼圖位 --></div>
</template><script setup>
defineProps({ title: String, subTitle: String })
</script>
使用方式:
<HomePanel title="新鮮好物" sub-title="新鮮出爐"><template #main> <!-- 填充拼圖 --><ul class="goods-list"><li v-for="item in list">{{ item.name }}</li></ul></template>
</HomePanel>
實現效果:

插槽的 3 個好處:
  1. 結構分離:標題樣式統一管理,內容區自由發揮(列表 / 圖片 / 按鈕均可)
  2. 復用性強:一個面板組件適配 N 種業務場景
  3. 語義清晰:通過具名插槽(#main)明確內容位置

二、懶加載:讓圖片「按需加載」的魔法

電商首頁往往包含大量圖片,一次性加載會導致:

  • 首屏加載慢
  • 流量浪費
  • 手機發燙

懶加載(Lazy Load)的核心邏輯:圖片進入視口時再加載

用 Vue3 指令實現懶加載

// 全局指令:directives/lazy.js
import { useIntersectionObserver } from '@vueuse/core'export const lazyPlugin = {install(app) {app.directive('img-lazy', {mounted(el, binding) {// 當元素進入視口時const { stop } = useIntersectionObserver(el, ([{ isIntersecting }]) => {if (isIntersecting) {el.src = binding.value // 替換真實srcstop() // 停止觀察,避免重復觸發}})}})}
}
使用方式:
<img v-img-lazy="goods.picture" alt="商品圖" />
實現原理拆解:
  1. IntersectionObserver:瀏覽器原生 API,監聽元素是否進入視口
  2. 指令生命周期:在mounted階段綁定觀察,避免重復綁定
  3. 停止觀察:圖片加載后立即停止監聽,節省性能

三、插槽 × 懶加載:實戰中的黃金組合

在「商品館」模塊中,同時用到了插槽和懶加載:

<HomePanel title="數碼館"><template #main><div class="box"><img v-img-lazy="bannerUrl" class="cover" /> <!-- 大圖懶加載 --><ul><li v-for="goods in list"><GoodsItem :goods="goods" /> <!-- 子組件插槽 --></li></ul></div></template>
</HomePanel><!-- GoodsItem子組件 -->
<template><RouterLink><img v-img-lazy="goods.picture" /> <!-- 商品圖懶加載 --><p>{{ goods.name }}</p></RouterLink>
</template>
效果:
  • 標題欄統一樣式,內容區自由布局(大圖 + 列表)
  • 所有圖片均在進入視口時加載,首屏加載速度提升 40%

四、新手避坑指南

  1. 插槽默認值:給插槽設置默認內容,避免父組件未傳時的空白
    <slot name="main">暫無內容</slot>
    
  2. 懶加載占位圖:加載前使用占位圖(如灰色色塊),避免布局抖動
    <img v-img-lazy="realSrc" :src="placeholder" />
    

  3. 指令參數校驗:確保指令值是合法 URL
    if (!binding.value.startsWith('http')) return
    

五、總結:讓組件會「呼吸」

  • 插槽讓組件有了「可插拔」的能力,像搭積木一樣組裝頁面
  • 懶加載讓頁面學會「按需呼吸」,節省資源的同時提升用戶體驗
  • 兩者結合,實現了 「結構統一」「內容靈活」的完美平衡

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80268.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80268.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80268.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

虛無隧穿產生宇宙(true nothing tunneling) 是誰提出的

是 亞歷克斯.維連金 英文名&#xff08;alex vilenkin 或者 Alexander Vilenkin)提出來的。 “虛無隧穿產生宇宙”&#xff08;true nothing tunneling&#xff09;這一概念并非一個標準的物理學術語&#xff0c;它更像是對某些現代宇宙學理論的描述&#xff0c;尤其是涉及宇宙…

postgis:添加索引時提示“對訪問方法 gist 數據類型 geometry 沒有默認的操作符表“

問題 在對gis表的geom字段創建空間索引時&#xff0c;出現“對訪問方法 "gist" 數據類型 geometry 沒有默認的操作符表”的提示報錯。 解決方案 按系列步驟進行排查并解決。 1.先確認已安裝postgis -- 查看postgis版本 SELECT postgis_full_version() 若安裝了則…

圖論---Prim堆優化(稀疏圖)

題目通常會提示數據范圍&#xff1a; 若 V ≤ 500&#xff0c;兩種方法均可&#xff08;樸素Prim更穩&#xff09;。 若 V ≤ 1e5&#xff0c;必須用優先隊列Prim vector 存圖。 #include <iostream> #include <vector> #include <queue> #include <…

代碼隨想錄算法訓練營第一天:數組part1

今日學習的文章鏈接和視頻鏈接 ● 自己看到題目的第一想法 ● 看完代碼隨想錄之后的想法 ● 自己實現過程中遇到哪些困難 ● 今日收獲&#xff0c;記錄一下自己的學習時長 狀態 思路理解完成 30% 代碼debug完成 60% 代碼模板總結并抽象出來 100% 題目 704 二分查找 題目鏈接…

企業為何要求禁用缺省口令?安全風險及應對措施分析

在當今數字化時代&#xff0c;企業網絡安全面臨著前所未有的挑戰。缺省口令的使用是網絡安全中的一個重要隱患&#xff0c;許多企業在制定網絡安全紅線時&#xff0c;明確要求禁用缺省口令。本文將探討這一要求的原因及其對企業安全的重要性。 引言&#xff1a;一個真實的入侵場…

PostgreSQL 中的權限視圖

PostgreSQL 中的權限視圖 PostgreSQL 提供了多個系統視圖來查詢權限信息&#xff0c;雖然不像 Oracle 的 DBA_SYS_PRIVS 那樣集中在一個視圖中&#xff0c;但可以通過組合以下視圖獲取完整的系統權限信息。 一 主要權限相關視圖 Oracle 視圖PostgreSQL 對應視圖描述DBA_SYS_…

【防火墻 pfsense】1簡介

&#xff08;1&#xff09; pfSense 有以下可能的用途&#xff1a; 邊界防火墻 路由器 交換機 無線路由器 / 無線接入點 &#xff08;2&#xff09;邊界防火墻 ->要充當邊界防火墻&#xff0c;pfSense 系統至少需要兩個接口&#xff1a;一個廣域網&#xff08;WAN&#xff0…

數據庫+Docker+SSH三合一!深度評測HexHub的全棧開發體驗

作為一名技術博主&#xff0c;我最近一直被各種開發工具切換搞得焦頭爛額。數據庫要用Navicat&#xff0c;服務器管理得開Termius&#xff0c;Docker操作還得切到命令行&#xff0c;每天光在不同工具間切換就浪費了大量時間。直到團隊里的一位架構師向我推薦了HexHub這個一體化…

第十天 Shader編程:編寫簡單表面著色器 Addressable資源管理系統 DOTS(面向數據技術棧)入門

前言 作為Unity初學者&#xff0c;在實現復雜場景時經常會遇到性能瓶頸。本文將帶你通過四個關鍵技術的實戰學習&#xff0c;掌握現代Unity開發的核心優化方案&#xff1a; Shader編程 - 編寫表面著色器控制物體渲染Addressable系統 - 實現高效資源管理DOTS技術棧 - 解鎖百萬…

項目自動化測試

一.設計測試用例(細致全面) 二.先引入所需要的pom.xml依賴 1.selenium依賴 2.webdrivermanager依賴 3.commons-io依賴 編寫測試用例–按照頁面對用例進行劃分,每個頁面是Java文件,頁面下的所有用例統一管理 三.common包(放入公用包) 類1utils 可以調用driver對象,訪問url …

ap無法上線問題定位(交換機發包沒有剝掉pvid tag)

一中學&#xff0c;新開的40臺appoe交換機核心交換機旁掛ac出口路由的組網&#xff0c;反饋ap無法上線&#xff0c;讓協助解決。 組網如下&#xff1a; 排查過程&#xff1a; 檢查ac的配置&#xff0c;沒有發現問題 發現配置沒有問題&#xff0c;vlan1000配置子接口&#xff…

第十七屆山東省職業院校技能大賽 中職組網絡建設與運維賽項

第十七屆山東省職業院校技能大賽 中職組網絡建設與運維賽項 賽題 B 卷 第十七屆山東省職業院校技能大賽中職組網絡建設與運維賽項 1 賽題說明 一、競賽項目簡介 “網絡建設與運維”競賽共分為以下三個模塊&#xff1a; ? 網絡理論測試&#xff1b; ? 網絡建設與調試&#xf…

關于QT信號、槽、槽函數的講解

也是好久沒有發帖子了&#xff0c;最近博主主要還是在邊學QT邊完成任務&#xff0c;所以進度很慢&#xff0c;但確實在這幾天對于QT自身槽和信號這類特殊的機制有了一定簡單的理解&#xff0c;所以還是想記錄下來&#xff0c;如果有初學者看到帖子對他有一定的幫助&#xff0c;…

YOLOv8 漲點新方案:SlideLoss FocalLoss 優化,小目標檢測效果炸裂!

YOLOv8優化秘籍&#xff1a;用SlideLoss和FocalLoss提升小目標檢測精度&#xff08;附代碼實戰&#xff09;?? ?&#x1f4cc; 核心問題&#xff1a;YOLOv8在檢測小物體時效果不夠好&#xff1f;?? YOLOv8雖然是強大的目標檢測模型&#xff0c;但在處理小物體或類別不平…

基于cubeMX的hal庫STM32實現MQ2煙霧濃度檢測

一、任務目標 使用STM32F103C8T6單片機&#xff0c;使用單片機AD模塊采集MQ2煙霧傳感器的數據&#xff0c;在OLED屏顯示檢測到的AD值、電壓值和濃度值&#xff08;ppm單位&#xff09;。 二、實現過程 1、MQ2煙霧傳感器的濃度轉化方法 &#xff08;1&#xff09;實驗所用的M…

Android之AI自動化測試--Midscene

文章目錄 前言一、準備工作1.安裝2.準備 API Key3.安裝 adb4.連接設備 二、yaml格式自動化腳本1. 腳本案例2.執行結果 三、文件結構變化android 部分 前言 字節 Web Infra團隊官宣Midscene 從 v0.15 開始支持 Android 自動化測試&#xff0c;本篇文章介紹yaml方式的Android自動…

類的六個默認成員函數

如果一個類中什么成員都沒有&#xff0c;簡稱為空類。 空類中真的什么都沒有嗎&#xff1f;并不是&#xff0c;任何類在什么都不寫時&#xff0c;編譯器會自動生成以下6個默認成員函數。 默認成員函數&#xff1a;用戶沒有顯式實現&#xff0c;編譯器會生成的成員函數稱為默認…

HarmonyOS Grid 網格列表可長按 item 拖動移動位置

方案一 @Component struct WorkCircleCreatePage {// 存儲車控列表的數組@State VehicleDoorArr: IVehicleDoor[] = []// 當前移動的Item索引@State CurrentIndex: number = -1// 拖動時顯示的數據@State MoveItem: IVehicleDoor = { title: , icon: }// 拖動時放大倍數@State…

海量數據筆試題--Top K 高頻詞匯統計

問題描述&#xff1a; 假設你有一個非常大的文本文件&#xff08;例如&#xff0c;100GB&#xff09;&#xff0c;文件內容是按行存儲的單詞&#xff08;或其他字符串&#xff0c;如 URL、搜索查詢詞等&#xff09;&#xff0c;單詞之間可能由空格或換行符分隔。由于文件巨大&…

【數據結構】Map與Set結構詳解

數據結構系列五&#xff1a;Map與Set(一) 一、接口的實現 1.方法上 2.成員上 二、Map的內外雙接口結構 1.實現 1.1外部Map接口的實現 1.1.1臨摹整體 1.1.2外部類實現整體 1.2內部Entry接口的實現 1.2.1臨摹內部 1.2.2內部類實現內部 2.關系 3.意義 3.1邏輯內聚 …