diff --git a/packages/editor-preset-vision/src/editor.ts b/packages/editor-preset-vision/src/editor.ts index ba718b31b..24cb6169d 100644 --- a/packages/editor-preset-vision/src/editor.ts +++ b/packages/editor-preset-vision/src/editor.ts @@ -13,6 +13,7 @@ import { Skeleton, SettingsPrimaryPane, registerDefaults } from '@ali/lowcode-ed import { deepValueParser } from './deep-value-parser'; import { liveEditingRule, liveEditingSaveHander } from './vc-live-editing'; +import { isVariable } from './utils'; export const editor = new Editor(); globalContext.register(editor, Editor); @@ -36,10 +37,6 @@ interface Variable { value: any; } -function isVariable(obj: any): obj is Variable { - return obj && obj.type === 'variable'; -} - function upgradePropsReducer(props: any) { if (!props || !isPlainObject(props)) { return props; @@ -123,9 +120,11 @@ designer.addPropsReducer((props, node) => { if (ov === undefined && v !== undefined) { newProps[item.name] = v; } - // 兼容 props 中的属性为 i18n 类型,但是仅提供了一个值 + // 兼容 props 中的属性为 i18n 类型,但是仅提供了一个字符串值,非变量绑定 if (isUseI18NSetter(node.componentMeta.prototype, item.name) && - !isI18NObject(ov) && !isVariable(ov)) { + !isI18NObject(ov) && + !isJSExpression(ov) && + !isVariable(ov)) { newProps[item.name] = v; } } catch (e) { diff --git a/packages/editor-skeleton/src/components/mixed-setter/index.tsx b/packages/editor-skeleton/src/components/mixed-setter/index.tsx index c182873ee..1d169e6b4 100644 --- a/packages/editor-skeleton/src/components/mixed-setter/index.tsx +++ b/packages/editor-skeleton/src/components/mixed-setter/index.tsx @@ -207,8 +207,14 @@ export default class MixedSetter extends Component<{ const { setter, props } = currentSetter; let setterProps: any = {}; let setterType: any; + let dynamicProps: any = {}; if (isDynamicSetter(setter)) { setterType = setter.call(field, field); + // { componentName: string; props: object } + if (typeof setterType === 'object' && typeof setterType.componentName === 'string') { + dynamicProps = setterType.props || {}; + setterType = setterType.componentName; + } } else { setterType = setter; } @@ -224,6 +230,7 @@ export default class MixedSetter extends Component<{ field, ...restProps, ...extraProps, + ...dynamicProps, onInitial: () => { this.handleInitial(currentSetter); }, diff --git a/packages/react-simulator-renderer/src/renderer.ts b/packages/react-simulator-renderer/src/renderer.ts index e2818395c..cb5aa3995 100644 --- a/packages/react-simulator-renderer/src/renderer.ts +++ b/packages/react-simulator-renderer/src/renderer.ts @@ -517,8 +517,7 @@ class ComponentCreator extends React.Component<{ schema: any; propsMap: any, com if (this.isModal) { return null; } - const { schema, propsMap } = this.props; - const componentsMap = this.props.componentsMap; + const { schema, propsMap, componentsMap } = this.props; const ComponentClass = componentsMap[schema.componentName]; if (!ComponentClass) { return null;