美文网首页react & vue & angular
react--实现简易json编辑器

react--实现简易json编辑器

作者: 习惯水文的前端苏 | 来源:发表于2022-05-17 15:48 被阅读0次

    \bullet 分析

        \ast 由于个人不太喜欢一切皆props的形式,故想要做到一些公共api既可以在内部调用又可以对外部暴漏,类组件使用高阶/装饰器,函数组件使用hooks,我这里使用方式二,对外提供useEditor

        \ast json预览

                通过原生标签的contentEditable属性可以实现在线json编辑    

                通过pre标签并利用JSON.stringify的参数3实现格式化预览  

                通过监听input事件实现编辑监听  

        \ast 树形编辑

                借用antd的tree组件快速实现树形ui展示

                将json字符串处理成treeData展示到tree组件,操作后在转成json反显到左侧预览区

                删除编辑能力通过将treeData这颗多叉树转为二叉树操作后再回退到多叉树进行回显

    \bullet 创建react项目

        create-react-app json-edit --template typescript

    \bullet 实现

        \ast index作为入口文件,应当承载着所有内部接口对外暴漏的能力

            这里将json和editor组件以及useEditor暴漏出去

        \ast json组件用于展示并编辑json字符串

            使用contentEditable开启编辑,利用pre+JSON.stringify({}, null, ' ')进行格式化,通过input事件监听json修改

        \ast tree组件用于展示,并允许弹窗的形式删除或修改节点

            首先是json字符串转为多叉树后展示

        当存在节点编辑后,需要从节点删除或编辑,可以先将多叉树转成二叉树进行操作,后再转回多叉树,之前实现过,就不重复写了

        最后就是将编辑后的多叉树再转回json字符串

    \bullet 效果如下

    \bullet 待优化的点

        \ast 预览时无法实时进行格式化处理,这是因为格式化操作光标位置会重置,需要不断进行记录并在格式化后重新设置

        \ast 编辑操作目前仅支持编辑最后一级节点

        \ast 删除操作会导致原json数据的顺序被修改,这主要是在生成的id值不正确,导致在二叉转多叉时排序不准

    相关文章

      网友评论

        本文标题:react--实现简易json编辑器

        本文链接:https://www.haomeiwen.com/subject/ebqxurtx.html