diff --git a/packages/renderer-core/src/hoc/leaf.tsx b/packages/renderer-core/src/hoc/leaf.tsx index cb09ec2e8..e6981e729 100644 --- a/packages/renderer-core/src/hoc/leaf.tsx +++ b/packages/renderer-core/src/hoc/leaf.tsx @@ -367,7 +367,7 @@ export function leafWrapper(Comp: types.IBaseRenderComponent, { return null; } - _leaf = _leaf || getNode(componentId); + _leaf = _leaf || getNode?.(componentId); if (_leaf && this.curEventLeaf && _leaf !== this.curEventLeaf) { this.disposeFunctions.forEach((fn) => fn()); this.disposeFunctions = []; @@ -513,7 +513,7 @@ export function leafWrapper(Comp: types.IBaseRenderComponent, { } get leaf(): Node | undefined { - return this.props._leaf || getNode(componentCacheId); + return this.props._leaf || getNode?.(componentCacheId); } render() { diff --git a/packages/renderer-core/src/renderer/base.tsx b/packages/renderer-core/src/renderer/base.tsx index 830c92dbb..6a6d622b1 100644 --- a/packages/renderer-core/src/renderer/base.tsx +++ b/packages/renderer-core/src/renderer/base.tsx @@ -475,10 +475,6 @@ export default function baseRendererFactory(): IBaseRenderComponent { // DesignMode 为 design 情况下,需要进入 leaf Hoc,进行相关事件注册 const displayInHook = engine?.props?.designMode === 'design'; - if (schema.hidden && !displayInHook) { - return null; - } - if (schema.loop != null) { const loop = parseData(schema.loop, scope); const useLoop = isUseLoop(loop, this._designModeIsDesign); diff --git a/packages/renderer-core/tests/renderer/__snapshots__/renderer.test.tsx.snap b/packages/renderer-core/tests/renderer/__snapshots__/renderer.test.tsx.snap index 5ef56f775..76ed01e02 100644 --- a/packages/renderer-core/tests/renderer/__snapshots__/renderer.test.tsx.snap +++ b/packages/renderer-core/tests/renderer/__snapshots__/renderer.test.tsx.snap @@ -1121,3 +1121,20 @@ exports[`JSExpression base props 1`] = ` /> `; + +exports[`designMode designMode:default 1`] = ` +
+
+
+
+
+`; diff --git a/packages/renderer-core/tests/renderer/renderer.test.tsx b/packages/renderer-core/tests/renderer/renderer.test.tsx index d1917c5a5..9847c6cc1 100644 --- a/packages/renderer-core/tests/renderer/renderer.test.tsx +++ b/packages/renderer-core/tests/renderer/renderer.test.tsx @@ -7,7 +7,7 @@ import components from '../utils/components'; const Renderer = rendererFactory(); -function getComp(schema, comp = null): Promise<{ +function getComp(schema, comp = null, others = {}): Promise<{ component, inst, }> { @@ -17,6 +17,7 @@ function getComp(schema, comp = null): Promise<{ ); const componentInstance = component.root; @@ -321,4 +322,82 @@ describe('JSExpression', () => { done(); }); }) +}); + +describe("designMode", () => { + it('designMode:default', (done) => { + const schema = { + componentName: 'Page', + props: {}, + children: [ + { + componentName: "Div", + props: { + className: 'div-ut', + children: [ + { + componentName: "Div", + visible: true, + props: { + className: 'div-ut-children', + } + } + ] + } + } + ] + }; + + getComp(schema, components.Div).then(({ component, inst }) => { + expect(inst.length).toBe(2); + expect(inst[0].props.className).toBe('div-ut'); + expect(inst[1].props.className).toBe('div-ut-children'); + componentSnapshot = component; + done(); + }); + }); + it('designMode:design', (done) => { + const schema = { + componentName: 'Page', + props: {}, + children: [ + { + componentName: "Div", + id: '0', + props: { + className: 'div-ut', + children: [ + { + componentName: "Div", + id: 'hiddenId', + hidden: true, + props: { + className: 'div-ut-children', + } + } + ] + } + } + ] + }; + + getComp(schema, components.Div, { + designMode: 'design', + getNode: (id) => { + if (id === 'hiddenId') { + return { + export() { + return { + hidden: true, + }; + } + } + } + } + }).then(({ component, inst }) => { + expect(inst.length).toBe(1); + expect(inst[0].props.className).toBe('div-ut'); + done(); + }); + }); }) \ No newline at end of file