我使用和d3.js v4以ES6風格React嘗試製作具有上下文刷新的維度圖表。本質上,我拿了this example並將其轉換爲ES6。d3 v4 + react + es6 + crossfilter:Selection.exit()。remove()不起作用
我遇到的問題是selection.exit().remove()
不能正常工作,因此在每次重繪時,越來越多的圓被添加到svg g元素中。創建畫筆時會觸發重繪。我通過運行檢查
selection.exit()
.attr('class', d => {
console.log('anything');
return 'anything';
})
.remove();
但沒有輸出,所以我想我的數據選擇無效。
這裏是上下文:
componentDidMount() {
const el = ReactDOM.findDOMNode(this); // the mounted svg element
const svg = d3.select(el)
.attr('width', 300)
.attr('height', 500);
const g = svg.append('g')
.attr('transform', 'translate(32,32)');
let circles = g.append('g')
.selectAll('circle');
const brushGroup = g.append('g')
.attr('class', 'brush')
.call(brush);
function redraw() {
const all = group.all(); // crossfilter group returns an array
xAxisGroup.call(xAxis);
yAxisGroup.call(yAxis);
circles = circles.data(all, d => d); // keyFn for data constancy
circles.enter().append('circle')
.attr('r', radius)
.attr('cx', plotX) // radius + plotX/Y are simple curry functions
.attr('cy', plotY);
circles.exit().remove(); // not working!!
}
redraw();
}
我也知道在V4 d3-selection這種變化的,但我不是超級自信這行是我update
的,哪些是我的update + enter
。
任何幫助將不勝感激。謝謝!
的'exit'選擇,在你將數據綁定到一個選擇,所有這些都留下沒有數據指他們的元素。現在仔細看看你的「let circles」:它們不受任何數據約束。您必須正確定義您的輸入,更新和退出選擇。現在他們沒有正確定義。 –
當我設置'circles = circles.data(all,d => d)''時,不會創建正確的連接選擇,因此'circles.enter()'和'circles.exit()'會怎麼樣? –
你有你的圈子數據的獨特id這樣的'circles = circles.data(all,d => d.id)' – Cyril