简介
VTable 将交互效果的实现拆到了三个模块中去处理,分别是:
-
状态模块
stateManager:状态模块负责维持表格当前各种交互的状态,状态的改变会导致场景树的重新渲染; -
事件模块为
eventManager:事件模块负责监听事件,并根据不同的事件来改变状态; -
场景树
scenegraph:场景树负责重新渲染表格,为实现交互的最后一步;

接下来将从六个常用的交互来看下事件到状态的更新流程。
交互实现
单元格 select
核心状态
在状态模块中,决定单元格选中的核心状态值为 select.ranges,VTable 通过该字段来判断当前单元格是 否选中,改变 select.ranges 即可实现单元格选中状态的改变。
// packages\vtable\src\state\state.ts select: { ranges: (CellRange & { skipBodyMerge?: boolean })[]; //... }
我们来看下单元格选中是如何通过事件去影响状态的。
select 包含三种交互,分别是多选,拖拽多选和清空选择,三者所监听的事件各不相同。
单选
- pointerdown 单选单元格

在处理完单元格选中事件之后,更新 interactionState
// packages\vtable\src\event\listener\table-group.ts stateManager.updateInteractionState(InteractionState.grabing);
至于是否更新当前单元格选中状态的逻辑,则位于状态模块 stateManager.updateSelectPos中。