为什么需要一个 JSON 表单生成器? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
felixpy
V2EX    Vue.js

为什么需要一个 JSON 表单生成器?

  •  1
     
  •   felixpy
    /div>codetrial 2020-06-09 02:08:07 +08:00 3468 次点击
    这是一个创建于 1958 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看到一个老哥吐槽 [vue-form-builder]( https://github.com/openfext/vue-form-builder) 是在 UI 组件库之上做了一层 JSON 循环的封装。

    这里想说的是本身的实现方式确实不复杂,适配器只是为了解决简单字段的配置,绝大部分情况下字段对应的组件都需要自己进行封装。它的目标也不是为了不写代码而采用 JSON 配置的。反而,由于能够被配置的组件更加需要高度的抽象和设计,可能还会增加额外的开发成本。那为什么还需要配置呢?

    我觉得配置的本质是用来解决一类问题的差异性的。

    相似的 50 个复杂表单,每个表单 80% 的字段都一样但是校验规则、可选项、提示语等都有可能不一样。写成 50 个个性化的 template 肯定也是可以达成目标的。但是如果采用 JSON 配置的方式,可以把每个字段大家相同的地方都写成组件的默认值,只有不一样的地方才需要在 JSON 配置中体现,很多情况下一个字段可能只需要配置一个组件名即可。这样即便是 50 个 JSON 配置,复杂度也相对可控。

    根据 JSON 生成 template 也是一种思路。但是 如果生成的 template 无法手动修改,每次都需要改 JSON 然后重新生成,那我觉得跟其他方式差不多。如果生成的 template 如果可以手动修改,但是改过之后就无法反向同步到 JSON 配置上,那其实就是一个一次性的模板生成器,不具备持续维护性。如果生成的 template 可以手动修改还能反向同步到 JSON 配置上(复杂度较高,也需要很多约束),那我觉得统一维护 JSON 配置反而更加直观一些。

    另外生产环境中,配套的可视化表单配置、发布流程、版本管理等功能确实也是不可或缺的。
    2 条回复    2020-06-09 11:59:03 +08:00
    wly19960911
        1
    wly19960911  
       2020-06-09 09:33:01 +08:00
    "应对复杂的场景,你必须用 hack 的方式设立并传个 slot 进去这个组件把损失掉的 template 拓展性给补回来。然后你这种 hack 又要加字段说明。像这样,每个人往上面补一刀,之后这个模块基本上就废了"

    可能那个楼主不太懂什么是业务特化的组件吧,开发通用组件肯定需要,问题通用组件解决不了一切啊,只能根据业务来做相应功能的东西。而且我怀疑他没有维护过几十个复杂表单,那种 template 不是给人看的,没有任何维护性可言。
    wenerme
        2
    wenerme  
       2020-06-09 11:59:03 +08:00
    打个广告,基于 rjsf 做的 antd 的表单生成器 https://github.com/wenerme/apis/tree/master/packages/rjsf-antd-theme
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2284 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 01:20 PVG 09:20 LAX 18:20 JFK 21:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86