为了澄清,我们说我有3个组成部分:<Child>, <Parent>, <GrandParent>
我尝试在<Child>
内呈现<GrandParent>
,而不呈现<Parent>
(从中调用<Child>
)。
parent.js
class Parent extends Component {
...
componentDidMount() {
return (
<Route ... component={ Child } />
);
}
render() {
// the <Route> element is rendered here
}
}
点击<Parent>
中的链接,我希望<Parent>
卸载<Child>
以在<GrandParent>
内呈现,这就是React的新功能&#39; Portal& #39;应该实现。
从文档中,我们应该如何实现它:
ReactDOM.createPortal(componentToRender, elementToRenderInto);
// Hence in my case:
ReactDOM.createPortal(<Child />, document.getElementById('grand-parent'));
但我不确定如何/在何处使用这段代码。我尝试的所有内容都在<Child>
旁边呈现<Parent>
,这不是我想要的。关于这个主题的提示/文档/例子非常受欢迎
答案 0 :(得分:0)
如果我做对了,祖父组件必须获取对底层DOM节点的引用并将其传递给parent
,然后parent
使用child
呈现一个门户。
我想这可能是你想要实现的目标:
class GrandParent extends React.Component {
state = {};
getRef = that => this.setState({ self: that });
render() {
return (
<div ref={this.getRef} style={{}}>
+
<Parent parent={this.state.self}>
<Child />
</Parent>
+
</div>
);
}
}
class Parent extends React.Component {
render() {
if (this.props.parent)
return createPortal(this.props.children, this.props.parent);
return (
<div>
parent<Child />
</div>
);
}
}
class Child extends React.Component {
render() {
return <div>child</div>;
}
}