我正在开发一个项目,使用React作为我的UI,d3使用数据viz。 UI中设置的选项会更改图表的绘制方式(边框,颜色等)。绘制图表的代码是一个单独的库,在生产中,需要能够在没有React存在的情况下绘制图表。因此,我们用于绘制图表的所有代码都来自componentDidUpdate
中调用的函数。
所以,我有一个d3.js图表,它在React生命周期的最后得到了更新。我遇到的问题是,在一些d3.js图表元素的构造函数中,我附加了事件处理程序,但这些事件处理程序没有得到设置。我可以设置一个断点并进入d3代码,看看它们会被击中,但是当我尝试使用它们时,我什么也得不到。但是,我可以在componentDidUpdate
中附加事件处理程序并让它们工作,但我不明白为什么事件处理程序首先被删除。单步执行代码,我可以看到事件处理程序在HTML元素出现之后才会被附加。任何方向?提前谢谢。
var EventStuff= function(explodeConfig){
attachEventHandlers:function(){
var self = this;
d3.selectAll("path")
.on("click",function(d){
console.log("clicked paths");
});
}
}
}
我最初在componentDidMount
中呈现图表,随后对UI的更改会在componentDidUpdate
中呈现图表。 d3代码没有使用React的合成事件系统,当我附加事件处理程序时,HTML元素肯定存在。什么会阻止事件在我componentDidUpdate
附加它们之前不被解雇?