smartxworks / sunmao-ui

A Framework for Developing Low-code Tool
https://sunmao-ui.com
Apache License 2.0
1.38k stars 94 forks source link

Form组件适配,想通过Form Api来进行表单的全局管理。 #678

Open sukbearai opened 1 year ago

sukbearai commented 1 year ago
  1. Arco的Form会适配吗,目前没有实现是存在什么方面的问题?FormControl只做了效验逻辑,没有暴露出读取表单值的方法,我看到watch这个API可以用来取值。
  2. 还有一个问题,我想把sunmao app作为页面子组件使用,表单效验通过后再把formData传递给我自己的React组件,这个怎么实现比较好?
tanbowensg commented 1 year ago

Form 目前没有实现,有这么几个原因。

  1. 一个是因为 Sunmao 暂时在组件实现层面没有获取其他组件的 State 的办法。所以现在实现的 FormControl 也只有样式,没有暴露表单值。Chakra 的 Form 里是用一个 watch 方法实现的,但是比较 hack,而且会有其他问题,所以不推荐使用。
  2. 还有一个问题是 Sunmao 目前没有办法限制一个组件的children的类型。Form的children理应是FormControl,但是Sunmao目前并不能限制这一点。

因为这两个原因,现在实现Form组件的话不是很优雅,所以就没有实现。

如果你只是想要一个办法收集各个表单项的值到一个组件上。你可以试试看 transformer 这个datasource,效果跟 vue的computed是类似的。 如果你想要 Arco 的 Form 的样式,只要不介意第二点原因的话,应该也没什么其他的问题,可以自己实现一下。

你说的第二个功能,可以通过 apiService 来实现。initSunmaoUI 的返回里面有一个apiService,可以发出和监听事件。Sunmao的自定义组件、Trait和UtilMethod的参数里面都有 services,可以从services里面拿到apiService,发出自定义事件,然后在Sunmao之外监听自定义事件。 根据你的需求,或许可以封装一个 UtilMethod 来专门发出这个自定义事件。可以参考一下 core/v1/scrollToComponent 来实现一个。

sukbearai commented 1 year ago

Form 目前没有实现,有这么几个原因。

  1. 一个是因为 Sunmao 暂时在组件实现层面没有获取其他组件的 State 的办法。所以现在实现的 FormControl 也只有样式,没有暴露表单值。Chakra 的 Form 里是用一个 watch 方法实现的,但是比较 hack,而且会有其他问题,所以不推荐使用。
  2. 还有一个问题是 Sunmao 目前没有办法限制一个组件的children的类型。Form的children理应是FormControl,但是Sunmao目前并不能限制这一点。

因为这两个原因,现在实现Form组件的话不是很优雅,所以就没有实现。

如果你只是想要一个办法收集各个表单项的值到一个组件上。你可以试试看 transformer 这个datasource,效果跟 vue的computed是类似的。 如果你想要 Arco 的 Form 的样式,只要不介意第二点原因的话,应该也没什么其他的问题,可以自己实现一下。

你说的第二个功能,可以通过 apiService 来实现。initSunmaoUI 的返回里面有一个apiService,可以发出和监听事件。Sunmao的自定义组件、Trait和UtilMethod的参数里面都有 services,可以从services里面拿到apiService,发出自定义事件,然后在Sunmao之外监听自定义事件。 根据你的需求,或许可以封装一个 UtilMethod 来专门发出这个自定义事件。可以参考一下 core/v1/scrollToComponent 来实现一个。

好的,我再看看