废话不多说,先上代码
https://codesandbox.io/s/wild...
lowcode方式实现表单配置化(不知道我对lowcode的理解是否正确,我认为lowcode就是分治,隔离,解藕。让逻辑变得可替换,对组件进行约束,组合。对于组合是通过配置方式还是ui交互方式就无所谓)
我实现这个的核心思想就是,传入表单配置数组,配置项包括组件,组件参数,字段名,依赖项,远程获取数据的方法。
在form-creator.tsx中使用antd的Form组件作为容器,内部遍历配置项数组。渲染试图,将配置的组件参数通过解构的方式赋值。在这里对onValuesChange事件做了一次处理,因为需要记录最新的表单数据。
shouldAppear会接受当前最新的数据,来计算出是否要现实这个元素。
form-creator-item.tsx主要是对每一项做远程数据的处理还有缓存。resetFromServer包括两个属性
deps:string[]
loadFn: (value: any) => Promise<ReactNode>
deps目的是能够从当前formData中pick出依赖的数据,传递给loadFn,并且根据每次的数据不同,都回以当前的值当作key,存起来。这样在用户修改选项的时候,如果选中了曾经一样的值,就不会再次发请求啦。