希望defaultValue不影响生成的schema
如果A组件的a属性默认是false(源码里有false),我开发meta.js时也会描述这个组件a属性默认是false。 但是生成的schema.json 是 { a:false }, 实际期望不要有a:false
得去掉 meta.js 的属性描述
如果是Button按钮的size呢, 默认是middle. 而设计器中必须展示出它默认是middle的

但我不希望产出的schema.json 去配置size
这个设置了默认值 schema 就会生成,除非你自己过滤一下,参考 project.addPropsTransducer 这个 API。
这个设置了默认值 schema 就会生成,除非你自己过滤一下,参考 project.addPropsTransducer 这个 API。
稍微有点麻烦, 这样每个默认值不是false/undefined的地方都需要用这个api去设置默认值
这个是你业务逻辑,只能自己适配了。
我可以自己设计一个defaultValue2, 然后在这个api里,统一地处理?
可以尝试一下
设计优雅一点的话,可以:
- 在 advanced.filters 上挂载当前组件的哪些属性可以被过滤掉;
- 配合 addPropsReducer 来定制导出的 schema。addPropsReducer 中可以读取 advanced.filters,以及可以决定是在 'render'(编辑渲染态) 还是在 'save'(导出以供存储) 时钩子函数生效;
抛开这个issue.
翻源码时, 发现一个地方,可能有问题

props: this.document.designer.transformProps(props, this, stage),
...this.document.designer.transformProps(_extras_, this, stage),
transformProps方法最后会调用addPropsTransducer.
这个地方调用了两次addPropsTransducer, 我猜测第二次是处理内部props时调用的, 但是addPropsTransducer的使用方无法区分当前处理的是组件本身的props还是低代码引擎内部的props
这个设置了默认值 schema 就会生成,除非你自己过滤一下,参考 project.addPropsTransducer 这个 API。
我最终的做法
ctx.project.addPropsTransducer((props, node, ctx) => {
const propsWithDefaultValue = getPropsWithDefaultValue(node.componentMeta);
Object.keys(props).forEach((key) => {
if (key in propsWithDefaultValue && propsWithDefaultValue[key] === props[key]) {
delete props[key];
}
});
return props;
}, TransformStage.Save);