do-you-know-portal
你真的知道 React Portal 吗?
作者:markzzw 时间:2019-12-19
简介
你知道 react portal 的前身今世么?这篇文章将会告诉你答案。
目录
什么是Portal以及原理
Portal 提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案。一个 portal 的典型用例是当父组件有 overflow: hidden 或 z-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 组件的时候;
Modal 或者是 Dialog 组件的时候;生成Dropdown的下拉菜单的时候
因为可以在任意节点挂载需要的 React 元素,所以我们也会需要在下拉组件中使用到 Portal 帮助我们完成这件事;
参考资料
Last updated