G2 在经过数据处理之后,所有的具体图形绘制逻辑都在 Element 中承载。
每个 Element 都有他的 id,在 G2 更新的时候,会根据 id 去匹配和 diff,来决定 element 是做 更新、删除、新增中的哪一个逻辑。
现在的代码逻辑:
- https://github.com/antvis/G2/blob/master/src/geometry/base.ts#L941
- https://github.com/antvis/G2/blob/master/src/geometry/base.ts#L965-L970
问题:
- 逻辑不清晰,本身是一个很纯净的 diff,写出来完全看不懂
- 新增、更新 和 销毁 的逻辑是分割开的
解法
- 增加 diff 逻辑,产出就是 remvoed、added、updated
- 然后去做对应的逻辑
参考:https://github.com/antvis/G2/blob/v5-tmp/src/geometry/geometry.ts#L494