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

20 小时 4 分钟前
 Chuckle
===先说说背景
react ,表单是一个抽象 json ,若干 type ,每种 type 编辑时、详情时各一个组件,对应渲染。

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

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

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

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

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

问问大伙还有啥好想法。
425 次点击
所在节点    前端开发
4 条回复
murmur
12 小时 6 分钟前
我用的大型 OA ,只保存了历史记录,没有对比功能, 可能的却是太难了
Shokupanman
11 小时 37 分钟前
不用每个都单独写一套,扩展一下你那个最基础组件的功能就行了,isEqual 不也能写到基础组件里面去吗
hwdq0012
11 小时 20 分钟前
这个我在我们属性树上做过, 设计模式 proxy , 原来的数据用包在代理数据里,代理里加状态
Chuckle
6 小时 23 分钟前
@Shokupanman 每种 type 都是独立的组件,要展示的内容、value 数据结构都不同,没法复用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1156693

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX