D3.js在React中更新数据后图表不刷新怎么办?
我用D3.js在React里画了个折线图,初始渲染没问题,但props里的data变了之后,图表根本没更新,还是老数据。是不是哪里绑定错了?
我试过在useEffect里重新调用绘图函数,也用了selectAll().data().join(),但就是不生效。
useEffect(() => {
const svg = d3.select(svgRef.current);
svg.selectAll('path.line')
.data([data])
.join('path')
.attr('class', 'line')
.attr('d', d3.line()(data));
}, [data]);
首先你得确认在数据变化时确实触发了重新渲染。你的useEffect写法基本是对的,但有个细节需要注意:d3.line()这个生成器函数需要传入当前绑定的数据,而不是直接用全局的data变量。
试试这样改:
另外提醒一下,如果是在WordPress里做这种可视化组件,记得处理好依赖注入,有时候插件可能会干扰到全局对象。我以前就遇到过类似情况,折腾了半天才发现是某个SEO插件在捣鬼。
对了,别忘了检查xScale和yScale是不是也根据新的数据范围做了更新,有时候这也会导致图表看起来没变化。累死个人了,调试这些真不容易啊。