news 2026/3/17 17:54:33

模态框与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/3/14 17:14:30

一文搞懂Python匿名函数

什么是python函数&#xff1f;学过python的小伙伴会知道&#xff0c;在python中用【def 函数名参数】的方式定义函数&#xff0c;即&#xff1a;>>> def function_name(parameters): ...这样的函数拥有函数名&#xff0c;调用函数只需要&#xff1a;>>&…

作者头像 李华
网站建设 2026/3/14 4:14:00

3分钟让你的Mac鼠标滚动体验脱胎换骨:Mos深度体验指南

3分钟让你的Mac鼠标滚动体验脱胎换骨&#xff1a;Mos深度体验指南 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently f…

作者头像 李华
网站建设 2026/3/12 22:59:53

PaperXie深度解析:当学术写作遇上智能降重,如何在AI检测时代守护论文的“原创性”与“表达力”?——不止是改写工具,更是你的科研表达优化伙伴

引言&#xff1a;我们正站在一个“被检测”的学术十字路口 2025年的今天&#xff0c;如果你是一名研究生、博士生&#xff0c;或是一位正在准备职称评审、项目申报的学者&#xff0c;你一定对“查重”和“AIGC检测”这两个词不陌生。知网、维普、万方、Turnitin、CrossCheck……

作者头像 李华
网站建设 2026/3/12 6:51:12

Ubuntu 系统上安装和配置 Go 语言运行环境

Ubuntu 系统上安装和配置 Go 语言运行环境&#x1f680; 方法一&#xff1a;使用官方二进制包安装 (推荐) 这是 Go 官方推荐的方法&#xff0c;可以确保您获得最新版本。 步骤 1: 下载 Go 语言安装包 访问 Go 语言官方下载页面&#xff0c;找到适用于 Linux 的最新版本的压缩包…

作者头像 李华
网站建设 2026/3/12 22:59:48

AI测试、大模型测试(七)Java主流大模型框架技术

目录 一、大模型按「应用领域」分类 二、 主流框架技术特点 2.1 Spring AI框架 1、 pom依赖 2、 Spring AI特点 3、Spring AI 例子&#xff0c;Spring AI集成OpenAI并实现对话功能 2.2 LangChain4j框架 1、 LangChain4j简介 2、 LangChain4j使用 3、调用示例 一、大…

作者头像 李华