Used
How toUse React Portal in Remix
Because React Portals needs an actual DOM element where to be attached, we can't just use them in a Remix app because when doing Server-Side Rendering it will fail since there's no DOM.
We can solve this by using Remix Utils' ClientOnly.
import { ClientOnly } from "remix-utils/client-only";
export default function Component() {
return (
<ClientOnly>
{() => createPortal(<Modal />, document.getElementById('modal-portal')}
</ClientOnly>
)
}
With this we'll delay the rendering to the Modal inside a Portal until hydration happens client-side.