1- /* eslint-disable max-len */
2- /* eslint-disable no-param-reassign */
31import { createElement } from 'react' ;
4- import { render , unmountComponentAtNode } from 'react-dom' ;
2+ import { createRoot , type Root } from 'react-dom/client ' ;
53import {
64 globalContext ,
75 Editor ,
@@ -210,13 +208,14 @@ engineConfig.set('isOpenSource', isOpenSource);
210208
211209// container which will host LowCodeEngine DOM
212210let engineContainer : HTMLElement ;
213- // @ts -ignore webpack Define variable
214211
215212export { version }
216213engineConfig . set ( 'ENGINE_VERSION' , version ) ;
217214
218215const pluginPromise = registryInnerPlugin ( designer , editor , plugins ) ;
219216
217+ let root : Root | undefined ;
218+
220219export async function init (
221220 container ?: HTMLElement ,
222221 options ?: IPublicTypeEngineOptions ,
@@ -244,15 +243,19 @@ export async function init(
244243 if ( options && options . enableWorkspaceMode ) {
245244 const disposeFun = await pluginPromise ;
246245 disposeFun && disposeFun ( ) ;
247- render (
248- createElement ( WorkSpaceWorkbench , {
246+
247+ if ( ! root ) {
248+ root = createRoot (
249+ engineContainer ,
250+ ) ;
251+ root . render ( createElement ( WorkSpaceWorkbench , {
249252 workspace : innerWorkspace ,
250253 // skeleton: workspace.skeleton,
251254 className : 'engine-main' ,
252255 topAreaItemClassName : 'engine-actionitem' ,
253- } ) ,
254- engineContainer ,
255- ) ;
256+ } ) )
257+ }
258+
256259 innerWorkspace . enableAutoOpenFirstWindow = engineConfig . get ( 'enableAutoOpenFirstWindow' , true ) ;
257260 innerWorkspace . setActive ( true ) ;
258261 innerWorkspace . initWindow ( ) ;
@@ -263,14 +266,14 @@ export async function init(
263266
264267 await plugins . init ( pluginPreference as any ) ;
265268
266- render (
267- createElement ( Workbench , {
269+ if ( ! root ) {
270+ root = createRoot ( engineContainer )
271+ root . render ( createElement ( Workbench , {
268272 skeleton : innerSkeleton ,
269273 className : 'engine-main' ,
270274 topAreaItemClassName : 'engine-actionitem' ,
271- } ) ,
272- engineContainer ,
273- ) ;
275+ } ) )
276+ }
274277}
275278
276279export async function destroy ( ) {
@@ -284,5 +287,5 @@ export async function destroy() {
284287
285288 // unmount DOM container, this will trigger React componentWillUnmount lifeCycle,
286289 // so necessary cleanups will be done.
287- engineContainer && unmountComponentAtNode ( engineContainer ) ;
290+ root && root . unmount ( ) ;
288291}
0 commit comments