File tree Expand file tree Collapse file tree 2 files changed +20
-14
lines changed Expand file tree Collapse file tree 2 files changed +20
-14
lines changed Original file line number Diff line number Diff line change 11import type ReactDOM from 'react-dom' ;
22import type { Root } from 'react-dom/client' ;
3- import { createRoot } from './react-dom-client' ;
3+ import { getCreateRoot } from './react-dom-client' ;
44
55type Renderable = Parameters < ReactDOM . Renderer > [ 0 ] [ number ] ;
66type ReactHTMLElementDOMRoot = Pick < Root , 'render' | 'unmount' > ;
@@ -42,10 +42,10 @@ class ReactHTMLElement extends HTMLElement {
4242 this . _mountPoint = mount ;
4343 }
4444
45- root ( ) : ReactHTMLElementDOMRoot {
45+ async root ( ) : Promise < ReactHTMLElementDOMRoot > {
4646 if ( this . _root ) return this . _root ;
4747
48- this . _root = createRoot ( this . mountPoint ) ;
48+ this . _root = ( await getCreateRoot ( ) ) ( this . mountPoint ) ;
4949 return this . _root ;
5050 }
5151
@@ -55,8 +55,8 @@ class ReactHTMLElement extends HTMLElement {
5555 void this . renderRoot ( app ) ;
5656 }
5757
58- renderRoot ( app : Renderable ) : void {
59- const root = this . root ( ) ;
58+ async renderRoot ( app : Renderable ) : Promise < void > {
59+ const root = await this . root ( ) ;
6060 root . render ( app ) ;
6161 }
6262
Original file line number Diff line number Diff line change @@ -5,14 +5,6 @@ type ReactDOM18 = ReactDOMOriginal & {
55 createRoot ?: CreateRoot ;
66} ;
77
8- let MaybeReactDOM18 : ReactDOM18 ;
9- try {
10- // eslint-disable-next-line global-require,@typescript-eslint/no-var-requires
11- MaybeReactDOM18 = require ( 'react-dom/client' ) as ReactDOM18 ;
12- } catch {
13- MaybeReactDOM18 = ReactDOM as ReactDOM18 ;
14- }
15-
168type CreateRoot = typeof createRootOriginal ;
179type CreateRootParams = Parameters < CreateRoot > ;
1810type ReactDOMOriginal = typeof ReactDOM ;
@@ -30,5 +22,19 @@ const createRootFake = (container: CreateRootParams[0]) => {
3022 return newRoot ;
3123} ;
3224
25+ let checkedFor18 = false ;
26+ let MaybeReactDOM18 : ReactDOM18 ;
3327// eslint-disable-next-line import/prefer-default-export
34- export const { createRoot = createRootFake } = MaybeReactDOM18 ;
28+ export const getCreateRoot = async ( ) => {
29+ if ( ! checkedFor18 ) {
30+ try {
31+ // eslint-disable-next-line global-require,@typescript-eslint/no-var-requires
32+ MaybeReactDOM18 = ( await require ( 'react-dom/client' ) ) as ReactDOM18 ;
33+ } catch {
34+ MaybeReactDOM18 = ReactDOM as ReactDOM18 ;
35+ }
36+ checkedFor18 = true ;
37+ }
38+ const { createRoot = createRootFake } = MaybeReactDOM18 ;
39+ return createRoot ;
40+ } ;
You can’t perform that action at this time.
0 commit comments