echarts在窗口大小发生变化后进行重绘出现的问题。
问题截图:
Vue 3 默认使用 Proxy + Reflect 来创建响应式对象(通过 reactive()),这种代理机制对大多数情况是透明的。然而:
ECharts 等第三方库并不知道这个 Proxy 的存在。它们可能直接操作了对象的原型、使用 Object.keys()、JSON.stringify() 或其他非 Proxy 友好的方式访问对象。
这会导致:
获取不到正确的数据;
在 resize、update 图表等时候报错;
出现“cannot read property of undefined”类错误。
解决方法:
1、在组合式中使用 markRaw 标记不要被响应式处理的对象
import { markRaw } from 'vue';
state.chart = markRaw(echarts.init(el)); // 避免被 proxy
2、在选项式中,不在data里return,直接挂在this上
data() {
return {
option: null // 只保留 option,移除 myChart
}
},
methods: {
initChart() {
this.myChart = echarts.init(this.$refs.chartDom); // 直接挂在 this 上
},
}