关于提升程序编码效率的思考

最近在做一个需求,前台页面使用Vue+ElementUI实现,

        需求详情:绿框中的图片由后台数据库加载后渲染到页面,绿框里面勾选了多少个图片,那么红框中就实时显示勾选了多少图片,支持用户增加勾选或减少勾选

        当使用Checkbox多选框组件的时候,查了一下API,只有@change事件,坑人的事情来了,当触发@change的时候,它传入的是勾选的值,而不能对单个勾选做出响应,也就是我不知道它上一刻到底是勾选了还是没勾选

        比如,页面一开始默认勾选了[0,1,2],我再勾选一个3,参数传入的数据就是:[0,1,2,3];我取消勾选了2,参数传入的数据就是[0,1]。

        但是问题来了,我上次的勾选值你没给记录啊,我还要拿着上次的值去后台取消勾选啊

开始磨人之路:

  • 新建一个currentList去记录当前勾选的值,和el-ui的model的值相同
    • 记录的是当前实时勾选了多少复选框
  • 新建了一个choiceList去记录当前勾选的值
    • 去后台更新勾选新增的记录
  • 新建一个cancelList去记录取消勾选的值
    • 去后台更新勾选取消的记录
  • 新建了一个preList记录一开始页面加载的值
    • 和currentList比较,如果currentList的值在preList里面不存在,那说明新增的一条的记录是勾选,把索引加到choiceList里面
  • 新建了一个totalList记录用户一共点击过复选框的值
    • 和current比较,如果totalList的值不在current里面,说明用户取消了勾选,把索引加到cancelList里面

        既然数据机构做好了,那就开始把,于是一整天的时间都在维护这五个List上面了,过程之曲折,逻辑之复杂(还有其他页面效果也掺杂在js里面)

        当用户勾选复选框的时候,触发change()方法,在preList和currentList循环里面,对choiceList进行添加一条记录,同时因为choiceList加了一条记录,那么cancelList就要减去一条记录;在totalList和currentList循环里面,cancelList减去一条记录,同时因为cancelList减去了一条记录,那么choiceList就要加去一条记录。

        总是以为弄好了,实测总是这里的List多一个,那里的List少一个,于是面多加水,水多加面,大量的经历用于维护这五个List,连循环里面的代码都拿出来再单独维护一套,代码越写越多,写到后面越来越不自信

        写到晚上加班,头昏脑涨,去饮水机打水,突然“分而治之”思想灵光乍现,重新调整数据结构

  • 新建一个addArray记录用户到底勾选了多少个复选框
  • 新建一个reduceArray记录用户到底取消了多少个复选框
  • choiceList清空,把addArray的值映射到choiceList里面
  • cancelList清空,把reduceArray的值映射到choiceList里面

搞定,原来的两三百行代码,最后只用二三十行

总结:一开始总是想做出联动效果

        这个图片打了勾,那么增加一条打钩的索引记录,减少一条取消的索引记录       

        这个图片取消了勾,那么减少一条打钩的索引记录,增加一条取消的记录

        这么复杂的联动程序,我管他呢,我只记录好你打了多少勾,取消了多少勾,然后每次触发change(),我把记录索引的List全部清空,不去维护,直接全部映射进去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值