Skip to content

React Portals 有什么用?

Posted on:2024年4月19日 at 09:43

React Portals 是 React 提供的一种机制,用于将子组件渲染到父组件 DOM 层次结构之外的位置。它在处理一些特殊情况下的 UI 布局或交互时非常有用。以下是一些使用 React Portals 的常见情况:

  1. 在模态框中使用: 当你需要在应用的根 DOM 结构之外显示模态框(对话框)时,React Portals 可以帮助你将模态框的内容渲染到根 DOM 之外的地方,而不影响布局。

  2. 处理 z-index 问题: 在一些复杂的布局中,可能存在 z-index 的层级关系导致组件无法按照预期的方式叠加显示。使用 React Portals 可以将组件渲染到具有更高 z-index 的容器中,以解决这些问题。

  3. 在全局位置显示组件: 如果你希望某个组件在页面的固定位置显示,而不受父组件的定位影响,React Portals 可以将该组件渲染到 body 或其他容器中。

  4. 在动画中使用: 当你需要在页面中的某个位置执行动画时,React Portals 可以帮助你将动画的内容渲染到离该位置更近的 DOM 结构中,以提高动画性能。

使用 React Portals 的基本步骤如下:

import React from "react";
import ReactDOM from "react-dom";

function MyPortalComponent() {
  return ReactDOM.createPortal(
    // 子组件的内容
    <div>This is rendered using a portal!</div>,
    // 渲染目标的 DOM 元素
    document.getElementById("portal-root"),
  );
}

// 在应用的根组件中渲染 MyPortalComponent
function App() {
  return (
    <div>
      {/* 此处的内容在正常的 DOM 结构中 */}
      <p>This is a normal component.</p>

      {/* 使用 React Portals 渲染到 'portal-root' 元素外 */}
      <MyPortalComponent />
    </div>
  );
}

export default App;

在上面的例子中,MyPortalComponent 中的内容会被渲染到具有 id 为 ‘portal-root’ 的 DOM 元素外。

原文转自:https://fe.ecool.fun/topic/19da1c13-87a9-4fb4-98ae-0af28c7f03e6