jef*_*ese 6 javascript dom reactjs
所以我使用ReactDOM.createPortal在它的正常 DOM 放置之外渲染一个元素。我必须这样做,因为我正在与创建它自己的元素(在我的范围之外)的库进行交互,并且我必须将我的一个 DOM 元素放在他们的元素中。
我正在使用的createPortal是:
<div class="target">
<div />
<div class="myDiv" />
</div>
Run Code Online (Sandbox Code Playgroud)
我正在努力实现的目标:
<div class="target">
<div class="myDiv" />
<div/>
</div>
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到如何更改createPortal使其将节点作为第一个子节点插入的行为。
React 将用于appendChild渲染门户,这种行为是内在的,不会改变。
如果一个门户应该在其他孩子之前显示,那么应该在现有的 DOM 中提供一个容器:
<div class="target">
<div class="portal-container">...rendered portal...</div>
<div />
</div>
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的,则应直接访问 DOM 以编程方式添加容器,类似于本指南示例:
class PrependedPortal extends React.Component {
portalRoot = document.querySelector('.target');
portalContainer = document.createElement('div');
componentDidMount() {
this.portalRoot.prepend(this.portalContainer);
}
componentWillUnmount() {
this.portalRoot.removeChild(this.portalContainer);
}
render() {
return ReactDOM.createPortal(
this.props.children,
this.portalContainer
);
}
}
Run Code Online (Sandbox Code Playgroud)
prepend没有得到很好的支持,需要填充或替换为类似的 DOM 操作,例如 jQuery prepend。
| 归档时间: |
|
| 查看次数: |
2998 次 |
| 最近记录: |