diff --git a/src/components/monaco/index.tsx b/src/components/monaco/index.tsx index 96d2c7353..b5a4e23d0 100644 --- a/src/components/monaco/index.tsx +++ b/src/components/monaco/index.tsx @@ -44,12 +44,14 @@ export class MonacoEditor extends PureComponent { componentDidMount() { const { options = {}, override, editorInstanceRef } = this.props; - this.monacoInstance = this.monacoService?.create( - this.monacoDom, - options, - override - ); - editorInstanceRef?.(this.monacoInstance); + if (!this.monacoInstance) { + this.monacoInstance = this.monacoService?.create( + this.monacoDom, + options, + override + ); + editorInstanceRef?.(this.monacoInstance); + } } componentDidUpdate(prevProps) { diff --git a/src/provider/__tests__/__snapshots__/molecule.test.tsx.snap b/src/provider/__tests__/__snapshots__/molecule.test.tsx.snap index 02bb6b287..ea03a7070 100644 --- a/src/provider/__tests__/__snapshots__/molecule.test.tsx.snap +++ b/src/provider/__tests__/__snapshots__/molecule.test.tsx.snap @@ -1058,16 +1058,7 @@ dmlldzJfOV8xNjM4ODQ4MDI1NDI2MTE4Ml8zOF9bMF0TNSl1AAAAAElFTkSuQmCC"
- +
diff --git a/src/services/__tests__/instanceService.test.tsx b/src/services/__tests__/instanceService.test.tsx index 58e443ca0..44f81f397 100644 --- a/src/services/__tests__/instanceService.test.tsx +++ b/src/services/__tests__/instanceService.test.tsx @@ -2,6 +2,8 @@ import React from 'react'; import { defaultExtensions } from 'mo/extensions'; import InstanceService from '../instanceService'; import { render } from '@testing-library/react'; +import { LayoutEvents } from 'mo/model/workbench/layout'; +import molecule from 'mo'; describe('The InstanceService', () => { test('Constuctor with default config', () => { @@ -39,6 +41,7 @@ describe('The InstanceService', () => { const mockFn = jest.fn(); instance.onBeforeInit(mockFn); instance.onBeforeLoad(mockFn); + molecule.layout.emit(LayoutEvents.OnWorkbenchDidMount); instance.render(
123
); expect(mockFn).toBeCalledTimes(2); diff --git a/src/services/instanceService.tsx b/src/services/instanceService.tsx index 82692c260..42ecd8b67 100644 --- a/src/services/instanceService.tsx +++ b/src/services/instanceService.tsx @@ -112,22 +112,26 @@ export default class InstanceService StatusBarController, ]; - // resolve all controllers, and call `initView` to inject initial values into services - Object.keys(controllers).forEach((key) => { - const module = controllers[key]; - const controller = container.resolve(module); - controller.initView?.(); - }); - - this.emit(InstanceHookKind.beforeLoad); - molecule.extension.load(others); - molecule.layout.onWorkbenchDidMount(() => { - molecule.monacoService.initWorkspace( - molecule.layout.container! - ); + if (!this.rendered) { + molecule.monacoService.initWorkspace( + molecule.layout.container! + ); + + // resolve all controllers, and call `initView` to inject initial values into services + Object.keys(controllers).forEach((key) => { + const module = controllers[key]; + const controller = + container.resolve(module); + controller.initView?.(); + }); + + this.emit(InstanceHookKind.beforeLoad); + molecule.extension.load(others); + + this.rendered = true; + } }); - this.rendered = true; } return workbench;