1- import React , { useState , useEffect } from 'react' ;
1+ import React , { useState , useEffect , useRef } from 'react' ;
22import ReactDOM from 'react-dom' ;
33import { IReporterService , localize , getDebugLogger } from '@ali/ide-core-common' ;
4+ import { REPORT_NAME } from '@alipay/alex-core' ;
45import { createApp } from './createApp' ;
56import { Root } from '../core/Root' ;
67import { RootProps , LandingProps } from '../core/types' ;
@@ -40,9 +41,9 @@ export const renderApp = (domElement: HTMLElement, props: IRenderProps) => {
4041 domElement
4142 ) ;
4243
43- ( app . injector . get ( IReporterService ) as IReporterService ) . point ( 'alex:error' , 'startApp' , {
44- error : err ,
45- } ) ;
44+ ( app . injector . get (
45+ IReporterService
46+ ) as IReporterService ) . point ( REPORT_NAME . ALEX_APP_START_ERROR , err ?. message , { error : err } ) ;
4647 getDebugLogger ( ) . error ( err ) ;
4748 setTimeout ( ( ) => {
4849 throw err ;
@@ -57,7 +58,7 @@ export const renderApp = (domElement: HTMLElement, props: IRenderProps) => {
5758export const AppRenderer : React . FC < IRenderProps > = ( { onLoad, Landing, ...opts } ) => {
5859 const app = useConstant ( ( ) => createApp ( opts ) ) ;
5960 const themeType = useConstant ( ( ) => themeStorage . get ( ) ) ;
60- const [ appElement , setAppElement ] = useState < React . ReactElement | null > ( null ) ;
61+ const appElementRef = useRef < React . ReactElement | null > ( null ) ;
6162
6263 const [ state , setState ] = useState < {
6364 status : RootProps [ 'status' ] ;
@@ -67,17 +68,19 @@ export const AppRenderer: React.FC<IRenderProps> = ({ onLoad, Landing, ...opts }
6768 useEffect ( ( ) => {
6869 app
6970 . start ( ( appElement ) => {
70- setAppElement ( appElement ) ;
71+ appElementRef . current = appElement ;
72+ setState ( { status : 'success' } ) ;
7173 return Promise . resolve ( ) ;
7274 } )
7375 . then ( ( ) => {
74- setState ( { status : 'success' } ) ;
7576 onLoad ?.( app ) ;
7677 } )
7778 . catch ( ( err : Error ) => {
7879 setState ( { error : err ?. message || localize ( 'error.unknown' ) , status : 'error' } ) ;
7980
80- ( app . injector . get ( IReporterService ) as IReporterService ) . point ( 'alex:error' , 'startApp' , {
81+ ( app . injector . get (
82+ IReporterService
83+ ) as IReporterService ) . point ( REPORT_NAME . ALEX_APP_START_ERROR , err ?. message , {
8184 error : err ,
8285 } ) ;
8386 getDebugLogger ( ) . error ( err ) ;
@@ -93,7 +96,7 @@ export const AppRenderer: React.FC<IRenderProps> = ({ onLoad, Landing, ...opts }
9396
9497 return (
9598 < Root { ...state } theme = { themeType } Landing = { Landing } >
96- { appElement }
99+ { appElementRef . current }
97100 </ Root >
98101 ) ;
99102} ;
0 commit comments