Skip to main content

Portal

功能类似 ReactDOM.createPortal ,接收 container 作为渲染 Portal 内容的真实位置。配合PortalProvider 使用提供统一的挂载点所有Portal 渲染到 PortalProvider 下

import { Portal } from '@tencent/ykui'

React.useRef 作为 container​

function PortalContainerDemo(props) {
const ref = React.useRef(null)
return (
<>
<div ref={ref} id="container"></div>
<Portal container={ref}>
<p>React.useRef作为container</p>
</Portal>
</>
)
}

React.useState 作为 container​

function PortalContainerDemo(props) {
const [node, setNode] = React.useState(null)
return (
<>
<div ref={setNode} id="container"></div>
<Portal container={node}>
<p>React.useState作为container</p>
</Portal>
</>
)
}

PortalProvider (上下文挂载点)​

PortalProvider为Portal提供container作为挂载点,使用Portal时如何container为undefined则会从PortalContext中获取container作为挂载点

function PortalContextDemo(props) {
return (
<PortalProvider>
{(ref) => (
<>
<Portal>
<p>portal1 在global-container中渲染</p>
</Portal>
<Portal>
<p>portal2 在global-container中渲染</p>
</Portal>
<div className="global-container" ref={ref}/>
</>
)}
</PortalProvider>
)
}

Portal API​

属性说明类型默认值
disablePortal禁用则原来位置渲染boolean--
container挂载节点的位置string〡HTMLElement〡React.RefObject<HTMLElement>〡(() => HTMLElement)--