用途:在浏览器中通过 Chrome DevTools(MCP)调试 VTable 这类基于 canvas 的表格渲染与交互问题,围绕 VRender scenegraph 排查,而非只看 DOM 与 console。
适用场景:表格或局部区域空白、单元格内容缺失/错位/尺寸异常、冻结区错位、hover 与选区框位置异常;custom-layout、react-custom-layout 不生效或渲染偏移;react attribute 的 DOM 容器不显示或与 canvas 不同步;React18 正常而 React19 异常(custom-layout 空白、older version of React element、两份 React 共存、reconciler/hostConfig 兼容问题);React19 直接崩溃(ReactCurrentOwner);decodeReactDom + type is not a function;以及仅在滚动、resize、hover、冻结列切换后出现的交互问题。
工作流:先在源码中复现问题,按类型在 packages/vtable/examples、packages/vtable-gantt/examples、packages/vtable-plugins/demo、packages/vtable-sheet/examples 找到或创建对应 demo;修改 demo 配置复现;在 packages/vtable 目录下运行 rushx demo 启动服务;用 Chrome DevTools MCP 连接浏览器验证复现。修复后依赖 Vite 热更新,用同一 demo 验证,并检查是否引入新问题。
调试要点:可用 table.options.select.disableSelect、table.theme.scrollStyle 等动态注入配置测试边界情况;事件监听器闭包变量可能过期,可注入断点或日志检查;区分 stage 与 tableGroup 事件,注意 pointerleave 冒泡导致的 hover/tooltip 异常;判断节点归属时使用 target === stage || target?.isDescendantsOf?.(stage);用 table.getSelectedCellRanges()、table.getCellRange(col, row) 获取状态。
限制与注意事项:stage 宽高为 0 或父容器高度未定时先修布局;疑似两份 React/ReactDOM 时先修依赖树;发现 Fiber 污染(attribute 出现 tag/child/sibling/return/memoizedProps/lanes 等)时回到 reconciler HostConfig;canvas 问题需结合 scenegraph 与 bounds 对比验证;不要忽略 componentGroup;不要假设初始化变量在闭包中始终最新;树形/懒加载场景中 dataSource.getTableIndex(path) 返回 -1 表示路径不可见,不应继续参与高亮、focus、hover、selection 或刷新;布局变化后先清空旧 arrangement/缓存再重算;透视表角表头排查不要依赖 getCellAddressByHeaderPaths 全局坐标映射,应结合 cornerSetting.titleOnDimension 与 indicatorsAsCol,从 layoutMap.rowDimensionKeys/colDimensionKeys 截取完整路径比对。MCP 连接报错时先按 snippets.md 处理。相关参考文档包括 snippets.md、vtable-scenegraph.md、vrender-graphics.md、react18-react19.md,按需加载。