有这样一个需求,原来的后台需要重构,前端显示是这样的:可以看到,这个有增删功能,需要一个很长时间了。后台给的数据格式已经简化为:{"data":{"path":"data","type":"dict","showName":"Editing文言文","value":null,"isNecessary":true,"subDefine":[{"path":"data/title","type":"string","showName":"title","value":"周亚夫君细柳","isNecessary":true,"subDefine":null},{"path":"data/book","type":"list","showName":"textbook","value":null,"isNecessary":true,"subDefine":[{"path":"data/book/book_0","type":"dict","showName":"1","value":null,"isNecessary":false,"subDefine":[{“路径”:“data/book/book_0/version","type":"string","showName":"Material","value":"JinkyoNewEdition","isNecessary":true,"subDefine":null}]},{“路径”:“数据/书/书_1”,“类型”:“dict”,“showName”:“2”,“值”:空,“isNecessary”:false,“subDefine”:[{“路径”:"data/book/book_1/version","type":"string","showName":"Material","value":"Partbook","isNecessary":true,"subDefine":null}]}]}]}}查看各个参数的含义:path:当前路径type:表示类型showName:显示的字value:输入框显示的内容isNecessary:是否必须subDefine:子元素,ifany如果没有子元素,则不会渲染。后端如何将数据传递给我?我需要以这种格式将其传递给他。中间用户可能会修改值,然后这些值需要经过验证传递给帖子。结局的背景很古老。具体是用jquery通过字符串拼接将数据拼接成想要的html,并将这些字符串插入到真实的DOM中,所以重复代码很多,而且字符串相对html写的,可读性更差。为了增强可维护性,我准备重构一下,结构图怎么画,数据怎么转换成上面的结构图,这个结构图怎么画,下面记录下我的心路历程~~:jsx获取时这个需求当时对嵌套组件的思想不是很了解,所以首先想到要不要用jsx,因为当时觉得这种嵌套结构光靠HTML是无法实现的.既然这种思路做不出来,首先想到的是能不能通过js递归调用,因为js比较灵活,最后返回一个html。这样我们就用js代替html来生成这种嵌套结构的html。然后我们需要放弃模板并使用我们自己定义的渲染函数。之前没用过jsx,先研究了一个下午,准备先做一些简单的试水,先在这个项目中尝试一些jsx代码,添加之后发现编译报错,说我缺loader,报错如下:找了一些原因,发现vue.config.js中添加了chainWebpack:(config)=>{config.module.rules.delete('js');}这样不会编译jsx,但是如果和公司自己的组件库设计有冲突,然后需要组件库成员修复这个问题,那么项目可能不能按时交付。同时,需要考虑维护成本。vue中很少有地方使用jsx。难道后来的人需要增加维护成本来维护这个?那么有没有更好的方法来解决这个问题呢?外挂懒人思维懒。我的第一反应是找个插件什么的。什么都不用管,数据就传过去了。后台本身也是用的element-ui,所以第一个想法是用tree插件,但是树组件的形状不符合产品设计的要求,但是我们看到的是需要的参数传给tree的和后台传给我的参数是差不多的,那么我们能不能从tree的实现中获取经验呢?tree组件实现原理可以参考element-ui的实现,这里简化
