从D3v5升级到D3v6时sourceEvent未定义错误的解决求助
D3v5升级到v6后onBrush功能修复方案
原报错是因为D3v6移除了全局的d3.event对象,所有事件回调的事件参数改为直接传入函数,而非通过全局变量获取。以下是正确的修改步骤:
1. 修改onBrush函数的参数与事件引用
将原代码中的d3.event替换为回调函数接收的event参数:
}, { key: "onBrush", value: function onBrush(event) { if (event.sourceEvent && event.sourceEvent.type === "zoom") return; // 后续代码中所有d3.event的引用都要替换为event,比如: // const selection = event.selection; // 后续代码... }
2. 检查并替换其他d3.event引用
如果后续代码里还有使用d3.event的地方(比如获取选区、事件坐标等),全部替换为传入的event参数。例如:
- 原
d3.event.selection→ 改为event.selection - 原
d3.event.x→ 改为event.x
原因说明
D3v6重构了事件系统,移除了全局的d3.event,改为将事件对象作为第一个参数传递给回调函数。这一改动是为了避免全局状态带来的问题,同时让事件处理逻辑更清晰。之前的sourceEvent属性仍然保留在事件对象中,只是需要通过传入的参数访问。
内容的提问来源于stack exchange,提问作者Trevor McDaniel
相关产品推荐
相关产品推荐

