简述React的插槽(Portals)的理解?

React Portals(插槽)提供了一种将子节点渲染到存在于父组件 DOM 结构之外的 DOM 节点的优秀方法。

在 React 应用中,通常情况下,一个组件的渲染输出被插入到其父组件的 DOM 中,形成了一种嵌套的关系。然而,有时候,我们可能会遇到这样的情况:需要把某个子组件渲染到 DOM 树的其他部分,而不是在其父组件内部。这就是 Portals 的用武之地。

一个常见的使用 Portals 的场景是当我们需要创建一个模态框(Modal)或者弹出框(Popup)。这些 UI 元素需要覆盖页面的其他部分,而不是嵌入到当前 DOM 结构中。使用 Portals,我们可以将这些元素“传送”到 DOM 的其他部分。

React Portals 的使用方法如下:

ReactDOM.createPortal(child, container)

其中,child 是需要被插入到新位置的 React 节点,container 是一个 DOM 元素,child 将会被挂载到这个 DOM 元素上。

例如,创建一个简单的 Modal 组件:

class Modal extends React.Component {
  render() {
    return ReactDOM.createPortal(
      this.props.children,
      document.getElementById('modal-root')
    );
  }
}

在这个例子中,无论 Modal 组件在哪里被使用,它的内容总是会被渲染到 #modal-root 元素下。

需要注意的是,尽管 Portal 可以使内容在 DOM 树中的其他位置渲染,但是在 React 组件树中,仍然保持着原有的父子关系。这意味着,无论它在哪里渲染,都可以通过 context 等方式获取到它的 React 父组件的状态和属性。

发表评论

后才能评论