我试图从https://www.d3-graph-gallery.com/graph/correlogram_scatter.html移植代码以做出反应。
现在我知道有很多事情我需要改变,这样我就不会在每次重新渲染时创建一个新的 SVG,我只是想确保在我开始进行更改之前我可以让示例图正常工作。
但是没有任何渲染,并且控制台没有错误,这使得调试非常困难。
我将一个示例放入代码沙箱中,该示例似乎模仿了我最后看到的内容。
我错过了什么?
https://codesandbox.io/s/compassionate-haze-9excy?file=/src/App.js
看起来这可能需要越过终点线将我们的 D3 代码包装在 React 的useEffect
钩子中。
我们可以useEffect
最初调用,我们可以在数组中传递我们想要观察的图表的任何数据useEffect
作为参数。
这很有效,因为useEffect
在 DOM 元素第一次被渲染时被调用,这就是为什么它是访问存在于svg
ref属性中的 DOM 元素的最佳时间。
每次您的组件渲染时,它都会调用useEffect
. 您可以通过将参数传递到其数组中来观察更改,但是如果您只想useEffect
在组件第一次挂载时运行,则可以将该数组留空。
根据我的经验,这是一个有用的模式:
function YourChartCode({ data, property }) {
const yourRef = useRef();
// will be called initially and on every data change
useEffect(() => {
const svg = d3.select(yourRef.current);
// do D3 stuff here
// leave array empty or pass arguments you're watching into this array
}, [data, dimensions, property])
return (
<svg ref={yourRef}></svg>
)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句