@Shokupanman 每种 type 都是独立的组件,要展示的内容、value 数据结构都不同,没法复用
kamilic
42 天前
用状态管理那套方法来做?记录所有的操作历史记录,然后做 diff
Chuckle
41 天前
@kamilic diff 倒是简单,loadsh 都有现成方法,后面我还是用了方案二,写了个通用组件,把新旧数据都渲染一次,然后用 observer api 观察子元素 dom ,dom diff 、算最长公共子序列,把增删改的文本在新 dom 上标记了出来,不过坏处就是只能对文本节点操作,像勾选框之类的就没办法了
sibusana
33 天前
直接 diff html 呢?像富文本编辑器那样对比历史记录
Chuckle
32 天前
@sibusana 最后就是用了第二种方案,直接进行了 dom diff ,差不多是 html diff 的简化版吧,只 diff 了文本,而且 dom 的相对位置一样才是修改,不然就是删除后再添加 够用了,不知道 react 上的 dom diff 有没有现成的库,而且一旦替换了 react 管理的 dom ,react 后续就没法正常更新那个 dom 了,所以必须每次渲染都随机 key ,强制更新整个组件。