news 2026/5/25 17:18:24

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
模态框与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 }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 3:16:45

Tinker终极指南:如何让大模型学会高效使用搜索工具

Tinker终极指南&#xff1a;如何让大模型学会高效使用搜索工具 【免费下载链接】tinker-cookbook Post-training with Tinker 项目地址: https://gitcode.com/GitHub_Trending/ti/tinker-cookbook 在当今AI快速发展的时代&#xff0c;大型语言模型如何有效利用外部工具已…

作者头像 李华
网站建设 2026/5/26 4:20:03

OpenLayers无障碍地图开发终极指南:让每个人都能平等获取地理信息

OpenLayers无障碍地图开发终极指南&#xff1a;让每个人都能平等获取地理信息 【免费下载链接】openlayers OpenLayers 项目地址: https://gitcode.com/gh_mirrors/op/openlayers 地图是现代数字生活中不可或缺的工具&#xff0c;但传统的Web地图往往忽视了残障用户的需…

作者头像 李华
网站建设 2026/5/26 4:25:06

大蜂智能科技携手拯救HMI:重新定义气调包装设备的智能交互体验

走进任何一家超市的生鲜区&#xff0c;你都能看到它的身影&#xff1a;那些覆盖着保鲜膜的冷鲜肉托盘、抽真空的三文鱼块、充入混合保鲜气体的沙拉菜盒&#xff0c;以及份量精准的冷冻虾仁袋——所有这些锁住“鲜度”的包装&#xff0c;都离不开气调包装设备这条“高速保鲜流水…

作者头像 李华
网站建设 2026/5/26 5:03:27

屏幕共享卡顿?OpenScreen工具3步配置,远程协作效率提升60%

作为后端开发工程师或技术讲师&#xff0c;你是否常被“跨设备屏幕共享卡顿”“远程调试画面不同步”“多平台投屏兼容性差”等问题影响效率&#xff1f;今天分享的这款技术工具&#xff0c;能针对性解决这些实操难题。 【OpenScreen】「适配环境&#xff1a;Windows/macOS/Li…

作者头像 李华