当前位置: 首页 > news >正文

模态框与DOM,及React和Vue中的优化

为避免层级、布局和事件体系导致的副作用(例如受父元素的CSS影响)

模态框通常挂在 document.body 或根节点下

直接 DOM 操作

首先我想的是

const modal = document.createElement('div') modal.className = 'modal' document.body.appendChild(modal)

然后配置 z-index 置顶、 position: fixed 覆盖全页面

但是直接原生 DOM 会导致 重排、重绘 ,性能耗散!

所以在 React 和 Vue 的框架层面做了处理,需要让模态框挂载位置正确的同时能走diff判断进行性能优化,防止重复 mount,unmount 导致的销毁与重建,还会减少 CLS 提升 SEO

React - Portal传送门

ReactDOM.createPortal( <Modal />, document.body )

在组件关系逻辑树 Fiber Tree 中,管理组件关系和生命周期等等

模态框作为一个组件即一个 Fiber 节点进行插入

App └── Page └── Modal

但是在 DOM 中模态框并不是Page的子组件,而是直接挂在 body 下面的

<body> ├── #root │ └── Page └── Modal

Portal 改变了 DOM 的插入位置

这样就实现了 模态框仍然会在 React Render 中进行 虚拟diff 进行性能优化

Vue - Teleport瞬移

直接写进了语法层

<Teleport to="body"> <Modal v-if="open" /> </Teleport>

本质和 React Portal 基本一致

  • 虚拟节点标记 teleport
  • patch 阶段插入到指定容器
  • diff 范围仅限在 Teleport 子树中

直接JS操作

那么其实我们要优化的就是避免重复的创建

所以可以通过单例模式在全局作用域下面进行 let 的内存管理,防止重复的GC回收和创建导致的重排重绘

let modalEl function getModal() { if (!modalEl) { modalEl = document.createElement('div') modalEl.className = 'modal' document.body.appendChild(modalEl) } return modalEl }
http://www.jsqmd.com/news/78470/

相关文章:

  • 面向 Agent 的高并发分析:Doris vs. Snowflake vs. ClickHouse
  • 移动端真机测试与模拟器对比分析报告
  • 屏幕共享卡顿?OpenScreen工具3步配置,远程协作效率提升60%
  • 脑科学解锁高效单词记忆法
  • 51、Linux知识与CompTIA考试指南
  • 青春成长题材电影《鱼刺》定档12月24日全国上映 心落柔刺,暖亦相逢
  • 别再让尾货吃掉你的利润!超快消平台,正是数十万商家的共同答案
  • 编程考级与能力提升:避免为证而学的方法
  • Megatron-LM终极指南:从零开始掌握大规模模型分布式训练
  • 52、Linux 认证考试与系统管理全解析
  • OpenSCA-cli终极使用指南:从安装到实战
  • 一物一码源头常见有哪些?认准这类优质源头少走弯路
  • MVCC机制简介
  • 影刀RPA实战:AI智能回复小红书咨询,3秒响应客户不等待![特殊字符]
  • OWASP Juice Shop 安装教程【Windows】
  • iOS 巨魔商店专属 VansonMod 神器!无需越狱改内存、管存档,越狱支持汇编 Patch,还能 Hex 编辑 + 进程管理,iOS14 + 适配~
  • 一条爆款短视频,背后是AI超级工场的“智”造革命
  • MYSQL锁总结
  • 企业级大语言模型部署架构实战指南
  • MATLAB + 深度学习 = 炸裂!10 分钟训练你的第一个图像识别模型
  • 53、软件许可协议解读与自由软件许可条款分析
  • 20、网络安全工具:nmap与ssh的使用指南
  • MATLAB 数据可视化神器:Plot、Heatmap、Surface 图完整进阶指南
  • 21、Unix/Linux 系统安全与网络监控指南
  • 结构化数据翻译终极指南:json-translator让你的JSON/YAML文件瞬间国际化
  • 基于Springboot+vue精准扶贫管理系统的设计与实现【Java毕业设计·安装调试·代码讲解·文档报告】
  • 22、网络安全:入侵检测与防火墙的实用指南
  • 23、系统安全与实用命令全解析
  • 2025年中GEO优化公司综合实力推荐重磅发布
  • Obsidian个性化定制全攻略:从基础美化到专业界面设计