@@ -4,15 +4,15 @@ import createTransport from './createTransport';
44import Error from './Error' ;
55
66const transport = createTransport ( ) ;
7- window . core = transport ;
87
98type Props = {
109 appInfo : object ,
1110 children : React . ReactNode ,
1211} ;
1312
1413const Core = ( props : Props ) => {
15- const [ initialized , setInitialized ] = useState ( false ) ;
14+ const initialized = useRef ( false ) ;
15+ const [ ready , setReady ] = useState ( false ) ;
1616 const [ error , setError ] = useState < Error | null > ( ) ;
1717
1818 const stateListeners = useRef < CoreStateListener [ ] > ( [ ] ) ;
@@ -32,6 +32,9 @@ const Core = (props: Props) => {
3232 } ;
3333
3434 useEffect ( ( ) => {
35+ if ( initialized . current ) return ;
36+ initialized . current = true ;
37+
3538 const onCoreEvent = ( { name, args } : NewStateEvent | CoreEventEvent ) => {
3639 switch ( name ) {
3740 case 'NewState' :
@@ -63,37 +66,31 @@ const Core = (props: Props) => {
6366 }
6467 } ;
6568
66- if ( ! window . core ) {
67- transport
68- . init ( props . appInfo )
69- . then ( ( ) => {
70- window . core = transport ;
71- window . onCoreEvent = onCoreEvent ;
72- setInitialized ( true ) ;
73- setError ( null ) ;
74- } )
75- . catch ( ( e : Error ) => {
76- console . error ( 'Failed to initialize core:' , e ) ;
77- setInitialized ( false ) ;
78- setError ( e ) ;
79- } ) ;
80- }
69+ transport
70+ . init ( props . appInfo )
71+ . then ( ( ) => {
72+ window . core = transport ;
73+ window . onCoreEvent = onCoreEvent ;
74+ setReady ( true ) ;
75+ setError ( null ) ;
76+ } )
77+ . catch ( ( e : Error ) => {
78+ console . error ( 'Failed to initialize core:' , e ) ;
79+ setReady ( false ) ;
80+ setError ( e ) ;
81+ } ) ;
8182
8283 return ( ) => {
8384 stateListeners . current = [ ] ;
8485 eventListeners . current = [ ] ;
8586 errorListeners . current = [ ] ;
86- setInitialized ( false ) ;
87- setError ( null ) ;
88- window . onCoreEvent = null ;
89- window . core = null ;
9087 } ;
9188 } , [ ] ) ;
9289
9390 return (
9491 < CoreContext . Provider value = { { transport, on, off } } >
95- { error && ! initialized && < Error /> }
96- { initialized && ! error && props . children }
92+ { error && ! ready && < Error /> }
93+ { ready && ! error && props . children }
9794 </ CoreContext . Provider >
9895 ) ;
9996} ;
0 commit comments