在React中,子组件默认是挂载在父组件内部的。但是有时候我们需要将子组件挂载到父组件外部,可以通过以下步骤实现:
document.createElement
方法创建一个新的DOM元素。ReactDOM.createPortal
方法将子组件挂载到之前创建的DOM元素上。createPortal
方法接受两个参数,第一个参数是子组件,第二个参数是挂载点。appendChild
方法将DOM元素添加到父组件的DOM树中。下面是一个示例代码:
import React from 'react';
import ReactDOM from 'react-dom';
class ParentComponent extends React.Component {
constructor(props) {
super(props);
this.externalContainer = document.createElement('div');
}
componentDidMount() {
document.body.appendChild(this.externalContainer);
}
componentWillUnmount() {
document.body.removeChild(this.externalContainer);
}
render() {
return (
<div>
{/* 父组件的内容 */}
<h1>Parent Component</h1>
{/* 将子组件挂载到外部容器 */}
{ReactDOM.createPortal(<ChildComponent />, this.externalContainer)}
</div>
);
}
}
class ChildComponent extends React.Component {
render() {
return <h2>Child Component</h2>;
}
}
ReactDOM.render(<ParentComponent />, document.getElementById('root'));
在上面的示例中,我们创建了一个ParentComponent
父组件和一个ChildComponent
子组件。在父组件的componentDidMount
生命周期方法中,我们将创建的外部容器externalContainer
添加到document.body
中。然后,在父组件的render
方法中,使用createPortal
方法将子组件挂载到外部容器上。
这样,子组件就会被挂载到父组件外部的DOM树中,而不是父组件内部。
微搭低代码直播互动专栏
云+社区技术沙龙[第7期]
云+社区沙龙online [云原生技术实践]
GAME-TECH
GAME-TECH
云+社区技术沙龙[第8期]
北极星训练营
云+社区技术沙龙[第25期]
GAME-TECH
领取专属 10元无门槛券
手把手带您无忧上云