热力图数据更新后视图不刷新怎么办?
我用 React + ECharts 做了个热力图组件,数据从 props 传进来。但当我父组件状态更新、传入新数据时,热力图却没重新渲染,还是显示旧的。明明 console.log 打印出来的新数据是对的,就是图表不动。
我试过在 useEffect 里 setOption,也加了 key 强制重建,都不行。是不是我漏了什么配置?
useEffect(() => {
if (chartRef.current) {
const chart = echarts.init(chartRef.current);
chart.setOption({
series: [{
type: 'heatmap',
data: props.heatData // 这个变了但图没变
}]
});
}
}, [props.heatData]);
1. 没销毁旧实例,导致内存泄漏和渲染冲突
2. setOption没触发重绘
试试这样改:
主要改动点:
1. 用ResizeObserver处理容器尺寸变化
2. 在清理函数里调用chart.dispose()
3. setOption第二个参数传true
4. 把初始化和更新逻辑拆开
如果还不行,可以试试更暴力的办法:在父组件每次更新数据时生成随机key,不过性能会差点。
用 useRef 存一下实例:
我之前也遇到过,setOption 的第二个参数设为 true(notMerge),不然它会跟旧配置合并,有时候也会出问题。另外别忘了在组件卸载时 dispose 掉,不然内存泄漏等着你。