createPortal:允许你将 JSX 作为 children 渲染至 DOM 的不同部分。
createPortal(children, domNode, key?)
import { createPortal } from 'react-dom';
// ...
<div>
<p>这个子节点被放置在父节点 div 中。</p>
{createPortal(
<p>这个子节点被放置在 document body 中。</p>,
document.body
)}
</div>
portal 只改变 DOM 节点的所处位置。
在其他方面,渲染至 portal 的 JSX 的行为表现与作为 React 组件的子节点一致。
该子节点可以访问由父节点树提供的 context 对象、事件将从子节点依循 React 树冒泡到父节点。
参数
-
children
:React 可以渲染的任何内容,如 JSX 片段(<div />
或<SomeComponent />
等等)、Fragment(<>...</>
)、字符串或数字,以及这些内容构成的数组。 -
domNode
:某个已经存在的 DOM 节点,例如由document.getElementById()
返回的节点。在更新过程中传递不同的 DOM 节点将导致 portal 内容被重建。 -
可选参数
key
:用作 portal key 的独特字符串或数字。
返回值
createPortal
返回一个可以包含在 JSX 中或从 React 组件中返回的 React 节点。如果 React 在渲染输出中遇见它,它将把提供的 children
放入提供的 domNode
中。
警告
- portal 中的事件传播遵循 React 树而不是 DOM 树。例如点击
<div onClick>
内部的 portal,将触发onClick
处理程序。如果这会导致意外的问题,请在 portal 内部停止事件传播,或将 portal 移动到 React 树中的上层。
用法
渲染到 DOM 的不同部分
portal 允许组件将它们的某些子元素渲染到 DOM 中的不同位置。这使得组件的一部分可以“逃脱”它所在的容器。例如组件可以在页面其余部分上方或外部显示模态对话框和提示框。
调用 createPortal
并传入 JSX 与 应该放置的 DOM 节点 作为参数,然后渲染返回值以创建 portal:
import { createPortal } from 'react-dom';
function MyComponent() {
return (
<div style={{ border: '2px solid black' }}>
<p>这个子节点被放置在父节点 div 中。</p>
{createPortal(
<p>这个子节点被放置在 document body 中。</p>,
document.body
)}
</div>
);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?