纯后端校验schema数据能力,不依赖表单UI #1797
Replies: 7 comments 4 replies
-
第一次发现还能这么用,感觉很酷啊,相当于是把core作为一个虚拟表单,只用于做异步校验 |
Beta Was this translation helpful? Give feedback.
-
感觉可以再封装一下,API就叫做validateBySchema,同时注意一下,在校验结束的时候调用一下form.onUnmount释放内存,否则会内存泄漏的
|
Beta Was this translation helpful? Give feedback.
-
可以用一个微服务专干这种事,😁 |
Beta Was this translation helpful? Give feedback.
-
我也做过类似的需求,不过用的是 ajv,现在想想,完全可以复用 formily 自带的 json schema 能力,还省事了 |
Beta Was this translation helpful? Give feedback.
-
@janryWang 大大,今天升级了 formily,从 2.0.0-beta.78 => 2.0.0-rc.11,这个 validateBySchema 检查不出错误了,请问是改动了? 现在我想升级到 2.0.0-rc.11,也保留 validateBySchema 的能力,应该怎么做? |
Beta Was this translation helpful? Give feedback.
-
是个bug,麻烦提个issue |
Beta Was this translation helpful? Give feedback.
-
@janryWang 大大,还有个新问题,如果 schema 是 required 并且有 default 值,就不能校验到 期望是 |
Beta Was this translation helpful? Give feedback.
-
目的
目前formily的schema校验能力是依赖表单的,前端可以在保存数据前校验拦截保存操作。
但是如果校验的业务场景是没有UI表单的情况,比如:
总而言之,我们需要一个不依赖UI的校验 schema 数据的能力,而且校验规则要跟 formily 表单保持一致。
思路
研究源码发现,解析 schema 并生成 form、field 的能力是在 @formily/react 完成的,所以依赖UI层的能力。
而我们的解决思路是直接对接 @formily/core 和 @formily/json-schema,递归 schema 结构,直接生成对应的 form、field 模型。
感谢 formily 的分层设计合理,@formily/core 是完全不依赖UI的,并且校验模型也是不依赖UI,校验能力也是前后端一致,才得以实现这个功能。
demo
https://codesandbox.io/s/vibrant-thompson-bgoc2?file=/index.ts
demo代码不一定考虑周全,麻烦 @janryWang 大大看看有没有漏掉什么细节
Beta Was this translation helpful? Give feedback.
All reactions