D3.js 更新数据后图表不刷新怎么办?
我用 D3.js 画了一个柱状图,初始数据能正常显示,但当我用新数据调用更新函数时,柱子的高度没变。我已经用了 selectAll().data().enter().append() 这套流程,是不是漏了 update 部分?
这是我的更新代码:
function updateChart(newData) {
const bars = svg.selectAll('rect')
.data(newData);
bars.enter()
.append('rect')
.attr('width', 20)
.attr('height', d => yScale(d.value))
.attr('y', d => yScale(0));
bars.exit().remove();
}
通用做法是要把更新逻辑写到merge之后。修改后的代码应该这样:
关键点就是那个
merge(),它把enter和update的选择集合并,之后的操作会同时应用到新增和已有的元素上。我之前也踩过这个坑,debug了半天才发现没merge...可以试试这样改:
关键点是用了
.merge()把enter和update合并处理,这样新老柱子都会更新高度。我之前也经常忘记这步,debug的时候才发现柱子像冻住了一样不动,特别抓狂哈哈!另外建议把width之类的固定属性放在enter里,只把需要动态更新的属性放在merge后面,性能会更好些。