React Portals 的用途
将组件渲染到父组件 DOM 层次之外的位置
问题
React Portals 有什么用?
解答
React Portals 允许将子组件渲染到父组件 DOM 层次结构之外的位置,适用于以下场景:
模态框和对话框
将模态框渲染到根 DOM 之外,避免受父组件样式和布局的影响。
解决 z-index 层级问题
在复杂布局中,将组件渲染到具有更高 z-index 的容器中,确保正确的层叠显示。
全局固定定位组件
将组件(如 Tooltip、下拉菜单)渲染到 body 或其他容器中,不受父组件定位的限制。
优化动画性能
将动画内容渲染到更接近目标位置的 DOM 结构中,提升动画表现。
基本用法
import React from 'react';
import ReactDOM from 'react-dom';
function MyPortalComponent() {
return ReactDOM.createPortal(
<div>
This is rendered using a portal!
</div>,
document.getElementById('portal-root')
);
}
在 HTML 中需要预先创建目标容器:
<div id="root"></div>
<div id="portal-root"></div>
关键点
- Portal 将子组件渲染到指定的 DOM 节点,而非父组件内部
- 事件冒泡仍然遵循 React 组件树,而非 DOM 树
- 常用于模态框、Tooltip、下拉菜单等需要脱离父容器的组件
- 需要确保目标 DOM 节点在渲染前已存在
目录