前端小食堂 | Day14 - Vue 3 の傳送門與懸念

🌀 今日秘技:Teleport 與 Suspense の時空魔法

1. Teleport 任意門
<template>  <!-- 🚪 將組件傳送到 body 末尾 -->  <Teleport to="body">  <div class="modal">  <h2>重要通知!🎉</h2>  <button @click="close">關閉</button>  </div>  </Teleport>  <!-- 🪐 傳送到自定義容器 -->  <Teleport :to="isMobile ? '#mobile-menu' : '#desktop-menu'">  <NavBar />  </Teleport>  
</template>  <script setup>  
// 動態控制傳送位置  
const isMobile = useMediaQuery('(max-width: 768px)')  
</script>  <style scoped>  
.modal {  position: fixed;  z-index: 999;  /* 樣式不再受父組件影響! */  
}  
</style>  

🔔 核心場景

  • 模態框/通知欄全局展示
  • 跨布局層級組件渲染
  • 響應式動態切換渲染位置

2. Suspense 懸念結界
<template>  <!-- 🛡? 異步組件加載結界 -->  <Suspense>  <template #default>  <AsyncDashboard />  </template>  <template #fallback>  <div class="skeleton-loader">🌀 加載中...</div>  </template>  </Suspense>  <!-- 🔥 多異步依賴管理 -->  <Suspense :timeout="3000">  <template #default>  <ArticleContent :id="articleId" />  <CommentList :id="articleId" />  </template>  </Suspense>  
</template>  <script setup>  
// 異步組件定義  
const AsyncDashboard = defineAsyncComponent(() =>  import('./Dashboard.vue').then(comp => {  // 模擬網絡延遲  return new Promise(resolve =>  setTimeout(() => resolve(comp), 1500)  )  })  
)  
</script>  

🔔 高階技巧

  • 配合 defineAsyncComponent 實現代碼分割
  • 通過 timeout 屬性設置加載超時
  • 嵌套使用管理復雜異步依賴鏈

?? 冷知識:Suspense の心跳檢測

// 監聽異步狀態變化  
import { onServerPrefetch } from 'vue'  // 服務端數據預取  
onServerPrefetch(async () => {  await fetchData()  
})  // 客戶端心跳檢測  
const { isPending } = useSuspense()  
watch(isPending, (loading) => {  console.log(loading ? '🌀 數據加載中...' : '? 數據就緒!')  
})  

🌟 實驗室時空裝置

實現智能錯誤邊界

<template>  <Suspense @resolve="logSuccess" @fallback="logLoading" @pending="logPending">  <ErrorBoundary>  <AsyncComponent />  </ErrorBoundary>  </Suspense>  
</template>  <script setup>  
const logSuccess = () => console.log('? 數據加載成功')  
const logLoading = () => console.log('? 進入加載狀態')  
const logPending = () => console.log('🔄 等待異步依賴')  // 錯誤邊界組件  
const ErrorBoundary = {  setup(_, { slots }) {  const error = ref(null)  const handleError = (err) => {  error.value = err  console.error('🔥 組件崩潰:', err)  }  return () => {  return error.value  ? h('div', '😱 緊急修復界面')  : slots.default?.()  }  }  
}  
</script>  

明日秘典:《VueUse 魔法道具庫——30個提升效率の神器》 🧰
(留言告訴我你最想擁有的 Vue 超能力,本魔導師為你定制代碼咒語!🔮)


🛎? 本日避坑指南

  1. Teleport 的 CSS 陷阱
/* ? 父組件的樣式可能污染傳送內容 */  
.parent-class .modal {  /* 失效!因為 modal 已被傳送到外層 */  
}  /* ? 始終使用 scoped 樣式或全局樣式 */  
.modal { /* 全局樣式 */ }  
:deep(.modal) { /* scoped 穿透 */ }  
  1. Suspense 的 SSR 限制
// ? 服務端渲染時無法顯示 fallback  
// ? 需在服務端預先加載數據  
export async function serverPrefetch() {  await store.dispatch('fetchData')  
}  
  1. 異步組件緩存策略
// 🚀 配置加載緩存  
const AsyncComp = defineAsyncComponent({  loader: () => import('./HeavyComponent.vue'),  delay: 200, // 延遲顯示 loading  timeout: 3000, // 超時時間  suspensible: false // 禁用 Suspense 控制  
})  
  1. 多層 Teleport 優先級
<!-- 后寫的 Teleport 會覆蓋先寫的 -->  
<Teleport to="#target">內容A</Teleport>  
<Teleport to="#target">內容B</Teleport>  
<!-- 最終顯示內容B -->  

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

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

相關文章

emacs使用mongosh的方便工具發布

github項目地址: GitHub - csfreebird/emacs_mongosh: 在emacs中使用mongosh快速登錄mongodb數據庫 * 用途 在emacs中使用mongosh快速登錄mongodb數據庫&#xff0c; 操作方法: M-x mongosh, 輸入數據庫名稱&#xff0c;然后就可以自動登錄&#xff0c;前提是你已經配置好了…

Linux:Ubuntu server 24.02 上搭建 ollama + dify

一、安裝Ubuntu 具體的安裝過程可以參見此鏈接&#xff1a;鏈接&#xff1a;Ubuntu Server 20.04詳細安裝教程&#xff0c;這里主要記錄一下過程中遇到的問題。 安裝時subnet如何填寫 在Ubuntu中subnet填寫255.255.255.0是錯誤的&#xff0c;其格式為 xx.xx.xx.xx/yy &#…

unordered_set 的常用函數

在 C 的標準庫中&#xff0c;std::unordered_set 是基于哈希表實現的哈希集合。下面介紹這種語言里哈希集合的常用函數。 C std::unordered_set 1. 元素操作 insert 功能&#xff1a;向哈希集合中插入元素。如果元素已經存在&#xff0c;則不會重復插入。示例代碼&#xff1a…

starrocks批量啟停腳本

#!/bin/bash # 定義 StarRocks 安裝目錄 STARROCKS_HOME"/path/to/starrocks" # 定義 FE 和 BE 節點列表 FE_NODES("fe_node1_ip" "fe_node2_ip" "fe_node3_ip") BE_NODES("be_node1_ip" "be_node2_ip" "be_…

python 提取視頻中的音頻

在Python中提取視頻中的音頻&#xff0c;你可以使用moviepy庫&#xff0c;這是一個非常強大且易于使用的庫&#xff0c;專門用于視頻編輯。以下是如何使用moviepy來提取視頻中的音頻的步驟&#xff1a; 安裝moviepy 首先&#xff0c;你需要安裝moviepy。你可以通過pip安裝它&a…

大語言模型打卡學習DAY1

學習目標&#xff1a; 語言模型的發展歷程 大模型的技術基礎 學習內容&#xff1a; 1. 語言模型的發展歷程 語言模型通常是指能夠建模自然語言文本生成概率的模型&#xff0c;從語言建模到任務求解&#xff0c;這是科學思維的一次重要躍升。2. 大語言模型技術基礎 定義&#…

boarding_passes(登機牌)表的作用

boarding_passes&#xff08;登機牌&#xff09;表的作用 boarding_passes 這張表的主要作用是記錄旅客的登機信息&#xff0c;包括&#xff1a; 票號 (ticket_no) - 關聯到 tickets 表&#xff0c;表示這張票屬于哪個旅客。航班 ID (flight_id) - 關聯到 flights 表&#xf…

Go語言為什么運行比Java快

文章目錄 前言一、核心區別二、Go Vs Java1.Go 的啟動比 Java 快&#xff1f;2.選 Go Or Java&#xff1f; 總結 前言 Go 和 Java 是兩種廣泛應用的編程語言&#xff0c;它們在語言特性、性能、生態、應用場景等方面存在顯著區別。以下是它們的核心區別&#xff0c;以及在實際…

java生成一個24位的字符串,要求這個字符串由大寫的英文字母和數字組成,長度固定位24位

import java.security.SecureRandom;public class RandomStringGenerator {// 定義允許的字符集&#xff08;大寫字母和數字&#xff09;private static final String ALLOWED_CHARACTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";private static final SecureRando…

基于python的升級隊列加速決策

a-f大等級是3級 a-c建筑每升1級分別需要8天 d-f建筑每升1級分別需要10天 目前以下建筑隊列正在從0級升至1級 建筑A升級需要7天05&#xff1a;16&#xff1a;20 建筑b升級需要06&#xff1a;06&#xff1a;54 建筑c升級需要00&#xff1a;37&#xff1a;00 建筑d升級需要…

【經驗】Ubuntu|VMware 新建虛擬機后打開 SSH 服務、在主機上安裝vscode并連接、配置 git 的 ssh

常常有人問VMware-Tools裝了也復制粘貼不了怎么辦&#xff0c;這個東西影響因素太多了&#xff0c;我總是建議直接用SSH連接虛擬機。但是之前一直都沒有出教程&#xff0c;現在出一個簡單的教程。 文章目錄 在 Ubuntu 虛擬機&#xff08;VMware&#xff09;中開啟 SSH 服務、配…

C++多線程編程 3.互斥量、互斥鎖

目錄 1. 線程安全與互斥鎖&#xff08;std::mutex&#xff09; 2. 互斥量死鎖 3. std::lock_guard 4. std::unique_lock (1)示例 (2)詳細知識點 5. std::this_thread (1)sleep_for (2)sleep_until (3)yield (4)get_id 直接通過示例講解&#xff1a; 1. 線程安全與互…

【redis】hash基本命令和內部編碼

文章目錄 表示形式命令HSET 和 HGET HEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSETNXHINCRBYHINCRBYFLOAT命令小結內部編碼 表示形式 Redis 自身已經是鍵值對結構了 Redis 自身的鍵值對就是通過哈希的方式來組織的 把 key 這一層組織完成之后&#xff0c;到了 value 這一層&…

行為模式---策略模式

概念 策略模式是一種行為設計摸是&#xff0c;它的核心思想是將一些列的算法封裝成獨立的對象&#xff0c;并使它們可以相互替換&#xff0c;通過上下文進行調用。 策略模式通過算法抽象為獨立的策略類&#xff0c;客戶端可以根據自身需求選擇不同的策略類來完成任務、這種方…

Selenium 自動化測試學習總結

大概了解一下即可&#xff0c;現在主要用的自動化工具是 playWright&#xff0c;它可以錄制操作。 selenium是老款自動化測試工具&#xff0c;仍有很多可取之處。 安裝&#xff1a; pip install selenium即可。然后下載瀏覽器的驅動包&#xff0c;注意不是瀏覽器&#xff01;…

四層協議攻防手冊:從SYN Flood到UDP反射的深度防御

一、四層協議攻擊類型與特征 攻擊類型協議層特征SYN FloodTCP大量半開連接&#xff0c;SYN_RECV狀態堆積UDP反射放大UDP小請求包觸發大響應&#xff08;如NTP、DNS響應&#xff09;TCP分片攻擊TCP發送異常分片耗盡重組資源連接耗盡攻擊TCP建立大量空閑連接占用端口資源 二、TC…

【社區投稿】深入再談智能指針、AsRef引用與Borrow借用

深入再談智能指針、AsRef引用與Borrow借用 這是一個具有深度的技術主題。每次重溫其理論知識&#xff0c;都會有新的領悟。大約 2 年前&#xff0c;我曾就這一技術方向撰寫過另一篇短文《從類型轉換視角&#xff0c;淺談Deref<Target T>, AsRef<T>, Borrow<T&g…

外層元素旋轉,其包括在內的子元素一并旋轉(不改變旋轉中心),單元測試

思路&#xff1a;外層旋轉后坐標&#xff0c;元素旋轉后坐標&#xff0c;計算偏移坐標 <template><div class"outbox"><label>角度: <input v-model.number"rotate" type"number" /></label><br><div c…

如何在虛擬機上安裝hadoop

與前面java的方式相同安裝好hadoop后進入hadoop的環境變量my_env.sh 輸入#?HADOOP_export HADOOP_HOME /opt/module/hadoop-3.1.3 export PATH$PATH:$HADOOP_HOME/bin export PATH$PATH:$HADOOP_HOME/sbin 再輸入hadoop測試是否安裝成功

WPF-DataGrid的增刪查改

背景&#xff1a;該功能為幾乎所有系統開發都需要使用的功能&#xff0c;現提供簡單的案例。 1、MyCommand using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input;namespace Wp…