【发布时间】:2019-11-24 12:33:19
【问题描述】:
我正在使用 react 和 d3js 开发个人网络应用程序。
核心概念是我每 5 秒通过 websocket 接收一堆数据,并使用这些数据在画布上实时绘制圆圈。我收到的数据是一个对象数组,如下所示:
data = [{ name: 'alice', x: 10, y: 20, }...]
这就是我画圆圈的方式:
_renderCircles = () => {
const t = d3.transition().duration(500);
const radius = 3;
const group = d3.select(this.refs.container)
.selectAll('g.ring')
.data(data);
const circleGroup = group.enter().append('g')
.attr('class', 'cart')
.attr('transform', d => {
return `translate(${d.x}, ${d.y})`;
});
circleGroup.append('circle');
circleGroup.append('text')
.attr('text-anchor', 'middle')
.attr('fill', 'white');
group.select('circle')
.attr('r', radius)
.style('fill', 'yellow');
group.select('text')
.text(d => { return d.name; });
group.transition(t)
.attr('transform', d => {
return `translate(${d.x}, ${d.y})`;
};
group.exit().remove();
}
奇怪的行为是有时,一些圈子会“交换”他们的位置。它不会一直发生,但仍然经常引起我的关注。
例子
更具体地说,假设我的数据没有改变(所以它接收到相同的数据),但是在过渡期间,我可以看到圆圈 B 正在移动到 A,而圆圈 A正在移动到 B。过渡完成后,圆圈 B 的文本变为“A”,圆圈 A 的文本变为“B”,所以如果我们查看结果,没有任何变化。但我仍然可以看到在过渡期间圆圈在移动。
我希望我的问题解释得足够清楚,如有必要,我可以上传视频。这对我来说真的很奇怪,任何想法都会受到欢迎。提前致谢!
【问题讨论】:
标签: javascript reactjs d3.js