vue 复杂且大量 el-form-item 表单结构优化问题请教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
siguapajamas
V2EX    Vue.js

vue 复杂且大量 el-form-item 表单结构优化问题请教

  •  
  •   siguapajamas 2799 次点击
    这是一个创建于 429 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,目前最主要的动态因素是不同模块影响不同的表单配置,最主要的就使用了 switch case 返回不同的配置数组,再为每个表单取字符串名,如果 switch case"模块名" return 的数组中包含这个字符串名,就是 v-if 为 true,但是随着数量越来越多,交互的条件越来越来多,让表单填写多了变得卡顿.... 大佬们是否有别的实现思路,或者优化方法

    <el-col v-if=" switchFn(item.configType, item).includes('address') " > <el-form-item :prop="`item.address`" :rules="[ { required: true, message: '必填项', trigger: 'blur' }]" label="地址" > <el-input v-model="item.address"/> </el-form-item> </el-col>
    14 条回复    2024-10-10 13:29:29 +08:00
    lingxiaoli
        1
    lingxiaoli  
       2024-10-09 10:25:46 +08:00
    有些本末倒置 这里直接循环配置数组来做
    siguapajamas
        2
    siguapajamas  
    OP
       2024-10-09 10:35:00 +08:00
    @lingxiaoli 是有考虑过直接数组循环,我的业务场景其实是有多层 v-for 循环以及不同的表单校验,例如手机号邮箱等等奇奇怪怪的校验的, 也是我的错没有表现出来... 但是即使是走数组循环,一次性填写的表单多了一样会卡顿
    paopjian
        3
    paopjian  
       2024-10-09 10:49:59 +08:00
    提前用 computed 计算好要展示的组件列表,而不是现比较?
    还有就是可交互组件太多的原因?试试 lazy 或者掘金搜一下大表单卡顿
    siguapajamas
        4
    siguapajamas  
    OP
       2024-10-09 10:53:41 +08:00
    @paopjian 这是多个配置项的其中之一,computed 也是跟随着依赖数据变化而变化把?我的模块或者其他配置项改变也会导致 computed 值改变,最终让 v-if 再次触发,感觉没啥差别前辈
    siguapajamas
        5
    siguapajamas  
    OP
       2024-10-09 10:55:13 +08:00
    @paopjian 可以看到我的 switchFn 传入了模块名的值和遍历的 item 所有值, 就是配置项数组是受到不同模块的影响,以及模块中某些配置项的影响,因此 computed 也是随着配置项的改变时刻在变
    zhhbstudio
        6
    zhhbstudio  
       2024-10-09 11:12:13 +08:00
    不同模块的表单放在个组件里了?

    可以 computed 计算出一个 arr 然后 v-if="arr.includes('addres')",当前你每个 col 都执行一边 switchFn
    hevi
        7
    hevi  
       2024-10-09 11:15:28 +08:00
    直接 computed 一个属性,然后 v-if="isAddress"

    computed: {
    isAddress(){
    return item.cOnfigType=== 'address';
    }
    }
    siguapajamas
        8
    siguapajamas  
    OP
       2024-10-09 11:26:17 +08:00
    @zhhbstudio 是的前人的代码是所有的模块都揉在一个组件里面,4k+的代码行数 并且这种做法只要当前只要配置项一遍就会自动全部重新执行一遍 col 的 switchFn 导致效率变低
    @hevi 好的 我会在新的类似的大量表单结构里面尝试使用这种方法,实际上我现在正在做.....只是不太想沿用前任的方法,于是上 v 社问问
    siguapajamas
        9
    siguapajamas  
    OP
       2024-10-09 11:33:23 +08:00
    @hevi 额.....我又细看了一下,你可能理解错我的意思了,实际上这样的表单有无数个[无语] switchFn 会根据传入的值判断返回的数组例如['addres','aaa','bbb','ccc']等等,传入不同的会传出不同的数组,然后用 includes 来做判断,按照你那样我需要写无数个了.....
    siguapajamas
        10
    siguapajamas  
    OP
       2024-10-09 11:37:05 +08:00
    @zhhbstudio 额...莫名其妙多一个 表情....请忽略,并不是我的本意
    siguapajamas
        11
    siguapajamas  
    OP
       2024-10-09 11:37:38 +08:00
    @hevi 额...莫名其妙多一个 表情....请忽略,并不是我的本意
    AdminZ
        12
    AdminZ  
       2024-10-09 14:02:26 +08:00
    component 动态组件。规定好 json 配置规则,统一配置好基础表单项,如果有特定类别对应的特定 item ,使用 template 和 v-if 去增加,可以灵活处理,不然你类型多了,无数个 v-if
    siguapajamas
        13
    siguapajamas  
    OP
       2024-10-09 14:59:41 +08:00
    @AdminZ 是的目前就是类型很多 无数个 v-if 前人的代码我是不打算改了,之后我就是走 JSON 定好格式,然后循环渲染
    joytian
        14
    joytian  
       2024-10-10 13:29:29 +08:00
    你一个表单里有多少表单项会导致卡顿呢?解决思路:1 、减少页面上 dom 节点数量,滑到视口时才展示。2 、在展示之前先计算好哪些表单项是会被展示出来的,计算完了就不去操作了,修改表单项的值也不应该重新计算吧,除非是两个表单项之间有依赖关系的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1442 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 16:44 PVG 00:44 LAX 08:44 JFK 11:44
    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