Description
Currently createPortal
only works within the current renderer.
This means that if you want to embed one renderer into another (e.g. react-art
in react-dom
), your only option is to do an imperative render in a commit-time hook like componentDidMount
or componentDidUpdate
of the outer renderer's component. In fact that's exactly how react-art
works today.
With this approach, nested renderers like react-art
can't read the context of the outer renderers (#12796). Similarly, we can't time-slice updates in inner renderers because we only update the inner container at the host renderer's commit time.
At the time we originally discussed portals we wanted to make them work across renderers. So that you could do something like
<div>
<Portal to={ReactART}>
<surface>
<rect />
</surface>
</Portal>
</div>
But it's not super clear how this should work because renderers can bundle incompatible Fiber implementations. Whose implementation takes charge?
We'll want to figure something out eventually. For now I'm filing this for future reference.