前端小食堂 | 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.mzph.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…