diff --git a/packages/rax-simulator-renderer/src/renderer-view.tsx b/packages/rax-simulator-renderer/src/renderer-view.tsx index 397eb4fb4..c8b1513f2 100644 --- a/packages/rax-simulator-renderer/src/renderer-view.tsx +++ b/packages/rax-simulator-renderer/src/renderer-view.tsx @@ -5,7 +5,7 @@ import { Component, createElement, Fragment } from 'rax'; import { useRouter } from './rax-use-router'; import { DocumentInstance, SimulatorRendererContainer } from './renderer'; import './renderer.less'; - +import { uniqueId } from '@ali/lowcode-utils'; // patch cloneElement avoid lost keyProps const originCloneElement = (window as any).Rax.cloneElement; @@ -43,6 +43,7 @@ export default class SimulatorRendererView extends Component<{ rendererContainer componentDidMount() { const { rendererContainer } = this.props; this.unlisten = rendererContainer.onLayoutChange(() => { + debugger; this.forceUpdate(); }); } @@ -142,10 +143,18 @@ class Renderer extends Component<{ documentInstance: DocumentInstance; }> { private unlisten: any; + private key: string; + + componentWillMount() { + this.key = uniqueId('renderer'); + } componentDidMount() { const { documentInstance } = this.props; - this.unlisten = documentInstance.onReRender(() => { + this.unlisten = documentInstance.onReRender((params) => { + if (params && params.shouldRemount) { + this.key = uniqueId('renderer'); + } this.forceUpdate(); }); } @@ -168,6 +177,7 @@ class Renderer extends Component<{ components={renderer.components} appHelper={renderer.context} designMode={renderer.designMode} + key={this.key} suspended={documentInstance.suspended} self={documentInstance.scope} onCompGetRef={(schema: any, ref: any) => { diff --git a/packages/rax-simulator-renderer/src/renderer.ts b/packages/rax-simulator-renderer/src/renderer.ts index 03cffaa55..3edb9390b 100644 --- a/packages/rax-simulator-renderer/src/renderer.ts +++ b/packages/rax-simulator-renderer/src/renderer.ts @@ -141,6 +141,10 @@ export class DocumentInstance { } } + refresh() { + this.emitter.emit('rerender', { shouldRemount: true }); + } + onReRender(fn: () => void) { this.emitter.on('rerender', fn); return () => { @@ -234,6 +238,10 @@ export class SimulatorRendererContainer implements BuiltinSimulatorRenderer { return this._documentInstances; } + get currentDocumentInstance() { + return this._documentInstances.find((item) => item.id === host.project.currentDocument?.id); + } + constructor() { this.dispose = host.connect(this, () => { // sync layout config