do-you-know-portal

github: 地址 gitbook: 地址

你真的知道 React Portal 吗?

作者:markzzw 时间:2019-12-19

简介

你知道 react portal 的前身今世么?这篇文章将会告诉你答案。

目录

什么是Portal以及原理

Portal 提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案。一个 portal 的典型用例是当父组件有 overflow: hiddenz-index 样式时,但你需要子组件能够在视觉上“跳出”其容器。例如,对话框、悬浮卡以及提示框

以上是 React官方解释

配图

配图

现在的React-Portal

React16 之后,React 提供了一个函数 ReactDOM.createPortal(child, container) 来渲染一个 React 子元素 到指定的 container 中,使用起来非常方便;

React 官网的一个 Modal 的例子

这应该是现在大家所熟知的 portal 的一个用法

以前的React-Portal

那么,在 React 没有提供 createPortal() 的时候,Portal 又该怎么实现呢?这里我们会使用另外一个方法 ReactDOM.render(element, container[, callback])

使用 ReactDOM.render 的例子

甚至,在一些代码中还出现了使用 ReactDOM.unstable_renderSubtreeIntoContainer(paren,component,container,callback); 这些便是在 createPortal 方案没有出现的时候,一些解决方法;

Portal使用场景

最熟悉的就是生成一个 Modal 或者是 Dialog 组件的时候;

生成Dropdown的下拉菜单的时候

因为可以在任意节点挂载需要的 React 元素,所以我们也会需要在下拉组件中使用到 Portal 帮助我们完成这件事;

参考资料

Last updated