alibaba / lowcode-engine

An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系
https://lowcode-engine.cn
MIT License
14.09k stars 2.45k forks source link

设置循环渲染的数据后不触发 History 的 onChangeState 事件,不能点击撤销 #3020

Open zj131711 opened 3 weeks ago

zj131711 commented 3 weeks ago

Describe the bug (required) / 详细描述 bug(必填)

document.history 用来实现 undo/redo 功能,当schema发生变更时可以记录到 history 的 records 里面,并且state改变时会抛出 onChangeState 事件,但只有在设置循环渲染的数据后会出现不触发 onChangeState 事件,undo按钮也无效。


To Reproduce (required) / 如何复现 bug?(必填,非常重要)

Steps to reproduce the behavior: / 详细复现步骤: 以下是简化场景的重新步骤

  1. 打开demo页面 https://lowcode-engine.cn/demo/demo-basic-antd/index.html
  2. 重置页面后,拖入1个Avatar组件(其他组件也一样),选中组件,在右边切换到“高级”Tab,此时Avatar的schema会自动增加 "loopArgs": [ null, null ],撤销按钮会亮起,直接保存(或者切回其他tab修改之后保存也一样的)
  3. 刷新页面,切换到Avatar的“高级”Tab,点击"循环数据"的“编辑数据”,填写任意值例如 [1, 2] 之后点击确认,Avatar 成功在画布中渲染为2个
  4. 问题出现了:撤销按钮未亮起,点击无法撤销。期望结果是可以点击撤销对循环数据的配置。

调试后发现,与其他setter的变动相比较,虽然同样触发了 AliLowCodeEngine/editor-skeleton/src/components/settings/settings-pane.tsxfield.setValue(value, true);,但是这种情况下不会进入下一步 AliLowCodeEngine/designer/src/document/history.ts 的 MobX reaction 的监听函数,所以不会触发状态改变。但还查不到为什么。

Screenshots (optional) / bug 截图(可选)

Sceenshots for further information. (If applicable.) / 一些有用的截图将会帮助我们更好的明确以及定位问题


Environments (please complete the following information) (required): / 请提供如下信息(必填)

(this information can be collected via the manual plugin / 版本信息可通过低代码用户手册插件收集)

Additional context (optional) / 更多额外信息(可选)

Any other context of the problem here. / 可以追加更多的额外信息,帮助定位问题