diff --git a/packages/renderer-core/src/hoc/leaf.tsx b/packages/renderer-core/src/hoc/leaf.tsx index e626ab404..3c1c96b72 100644 --- a/packages/renderer-core/src/hoc/leaf.tsx +++ b/packages/renderer-core/src/hoc/leaf.tsx @@ -226,7 +226,7 @@ export function leafWrapper(Comp: types.IBaseRenderComponent, { nodeChildren: null, childrenInState: false, visible: !hidden, - condition: __parseData(condition, scope), + condition: __parseData?.(condition, scope), nodeCacheProps: {}, nodeProps: {}, }; @@ -396,7 +396,7 @@ export function leafWrapper(Comp: types.IBaseRenderComponent, { if (key === '___condition___') { const { condition = true } = this.leaf?.export(TransformStage.Render) || {}; - const conditionValue = __parseData(condition, scope); + const conditionValue = __parseData?.(condition, scope); __debug(`key is ___condition___, change condition value to [${condition}]`); // 条件表达式改变 this.setState({ diff --git a/packages/renderer-core/src/utils/common.ts b/packages/renderer-core/src/utils/common.ts index cf46cf38d..0150095b3 100644 --- a/packages/renderer-core/src/utils/common.ts +++ b/packages/renderer-core/src/utils/common.ts @@ -330,7 +330,11 @@ export function forEach(targetObj: any, fn: any, context?: any) { Object.keys(targetObj).forEach((key) => fn.call(context, targetObj[key], key)); } -export function parseData(schema: unknown, self: any, options: any): any { +interface IParseOptions { + thisRequiredInJSE?: boolean; +} + +export function parseData(schema: unknown, self: any, options: IParseOptions = {}): any { if (isJSExpression(schema)) { return parseExpression(schema, self, options.thisRequiredInJSE); } else if (isI18nData(schema)) { diff --git a/packages/renderer-core/tests/hoc/leaf.test.tsx b/packages/renderer-core/tests/hoc/leaf.test.tsx index 106e6741a..308a8b900 100644 --- a/packages/renderer-core/tests/hoc/leaf.test.tsx +++ b/packages/renderer-core/tests/hoc/leaf.test.tsx @@ -5,6 +5,7 @@ import '../utils/react-env-init'; import { leafWrapper } from '../../src/hoc/leaf'; import components from '../utils/components'; import Node from '../utils/node'; +import { parseData } from '../../src/utils'; let rerenderCount = 0; @@ -37,6 +38,9 @@ const baseRenderer: any = { } }, documentId: '01' + }, + __parseData (data, scope) { + return parseData(data, scope, {}); } } diff --git a/packages/renderer-core/tests/renderer/renderer.test.tsx b/packages/renderer-core/tests/renderer/renderer.test.tsx index 580e57185..36ee4167e 100644 --- a/packages/renderer-core/tests/renderer/renderer.test.tsx +++ b/packages/renderer-core/tests/renderer/renderer.test.tsx @@ -329,7 +329,7 @@ describe('JSExpression', () => { ], loop: { type: "JSExpression", - value: "state.content" + value: "this.state.content" }, loopArgs: [ "item",