最近在看ReactV16带来的新东西,V16版本直接支持了Portal。今儿就总结一下Portal这个自己不是那么熟悉却又非常重要的“传送门”吧。
先说说为什么需要传送门。React的世界一切皆组件,进行render就需要一个root根节点进行挂载。组件套组件一层一层,不过最外面一层都是挂在在这个root根节点上的。
有一个常见的需求Dialog(弹窗),通常它会显示在屏幕正中央,它应该是一个独立的组件。因此将这个弹窗组件放在根节点下的子组件里显然是不合适的。
我们希望将其渲染在和root根节点同级的DOM上在React组件树的最顶层。样式独立,没必要受其他组件的干扰。除了Dialog需要在最顶层渲染之外,我们还希望(也可以说是诉求)在不同的业务组件中去使用它。这里就需要Portal咯。
( 天野喜孝展 )