React будет использовать appendChild
для визуализации портала, это поведение является внутренним и не подлежит изменению.
Если портал должен отображаться раньше других потомков, в существующей DOM должен быть предоставлен контейнер:
<div class="target">
<div class="portal-container">...rendered portal...</div>
<div />
</div>
Если это невозможно, необходимо напрямую обратиться к 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
);
}
}
prepend
не очень хорошо поддерживается и должен быть заполнен или заменен аналогичными манипуляциями с DOM, например, jQuery prepend
.