- Published on
ReactDOM.createPortal
ReactDOM.createPortal
将子节点渲染到已 DOM 节点中的方式,该节点存在于 DOM 组件的层次结构之外。
ReactDOM.createPortal(child, container)
import React from 'react'
import ReactDOM from 'react-dom'
type PropsType = {
getContainer?: HTMLElement // 指定组件挂载得节点
}
const App: React.FC<PropsType> = (props) => {
const { getContainer = document.body } = props
return ReactDOM.createPortal(<div>hello world</div>, getContainer)
}
应用场景
//
const Modal: React.FC = () => {
// 子元素会超出父元素 导致显示不全
// return <div style={{ height: 1000, width: 1000 }}>1</div>
// 可以使用ReactDOM.createPortal使其渲染到body下 不受父元素overflow影响
return ReactDOM.createPortal(<div style={{ height: 1000, width: 1000 }}>1</div>, document.body)
}
const App: React.FC = () => {
const [visible, setVisible] = useState(false)
return (
<div style={{ height: 100, width: 100, overflow: 'hidden' }}>
<Modal visible={visible} />
</div>
)
}