V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Chuckle
V2EX  ›  前端开发

前端表单详情渲染,历史记录对比,变化部分标记,怎么实现比较好

  •  
  •   Chuckle ·
    qxchuckle · 2 天前 · 520 次点击
    ===先说说背景
    react ,表单是一个抽象 json ,若干 type ,每种 type 编辑时、详情时各一个组件,对应渲染。

    现在详情时要标记出和上次有变化的部分,颗粒度还比较细,要具体到值变化。
    比如一个多选项,上一次 a 、b ,这次 b 、c ,那 c 就会被标记(标红或者下划线)。

    组件简单点还好说,但是有些表单项,对应的值也是一个复杂的对象,渲染出来是一个按钮,点进去是个弹窗。

    ===我有两个想法
    第一,比较搬砖点,那就是对每种 type 的详情组件单独改造,新旧值拿 isEqual 对比出来一个个插值处做判断和适配。

    但是 type 是随意写的,不一样的表单项,都可以单独起个 type ,维护一个组件,别的地方也会改造表单 json 加点东西,那都得维护这一套,很麻烦。

    第二就是搞个通用组件,新旧值都渲染,旧的 hidden ,然后 dom diff ,自动给有变化的文本节点加 span 标出来,但感觉会比较难搞,和 react 搭配起来、以及性能可能会有问题?

    问问大伙还有啥好想法。
    4 条回复    2025-09-03 14:29:48 +08:00
    murmur
        1
    murmur  
       2 天前
    我用的大型 OA ,只保存了历史记录,没有对比功能, 可能的却是太难了
    Shokupanman
        2
    Shokupanman  
       2 天前
    不用每个都单独写一套,扩展一下你那个最基础组件的功能就行了,isEqual 不也能写到基础组件里面去吗
    hwdq0012
        3
    hwdq0012  
       2 天前
    这个我在我们属性树上做过, 设计模式 proxy , 原来的数据用包在代理数据里,代理里加状态
    Chuckle
        4
    Chuckle  
    OP
       2 天前
    @Shokupanman 每种 type 都是独立的组件,要展示的内容、value 数据结构都不同,没法复用
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2608 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 12:33 · PVG 20:33 · LAX 05:33 · JFK 08:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.