npm install echarts vue-echarts # 推荐使用官方维护的 vue-echarts 组件库
# 或
npm install echarts --save
现象:图表不显示或报错 DOM element is not initialized
onMounted
生命周期初始化图表nextTick
确保 DOM 已挂载:import { nextTick } from 'vue';
onMounted(() => {
nextTick(initChart);
});
现象:数据变化后图表未更新
watch
深度监听数据变化setOption
时配置 notMerge: false
保留之前状态lazyUpdate
延迟合并更新chartInstance.setOption(newOption, {
notMerge: true,
lazyUpdate: true
});
现象:窗口缩放后图表未自适应
window.resize
事件const debounceResize = _.debounce(() => chartInstance?.resize(), 300);
const resizeObserver = new ResizeObserver(debounceResize);
onMounted(() => resizeObserver.observe(chartDom.value));
onBeforeUnmount(() => resizeObserver.disconnect());
现象:频繁创建/销毁组件后内存占用升高
onBeforeUnmount
中调用 dispose()
销毁实例weakMap
管理多个图表实例创建可复用的图表组件:
// 按需引入模块(可减少60%+体积)
import * as echarts from 'echarts/core';
import { BarChart, LineChart } from 'echarts/charts';
import {
TitleComponent,
TooltipComponent,
GridComponent,
DatasetComponent
} from 'echarts/components';
import { CanvasRenderer } from 'echarts/renderers';
echarts.use([
TitleComponent,
TooltipComponent,
GridComponent,
BarChart,
CanvasRenderer,
DatasetComponent
]);
large: true
sampling: 'lttb'
降采样chartInstance.setOption({
animation: process.env.NODE_ENV === 'development' // 生产环境关闭动画
});
// 注册自定义主题
import theme from './custom-theme.json';
echarts.registerTheme('myTheme', theme);
// 使用主题
const chart = echarts.init(dom, 'myTheme');
// 在Nuxt等SSR框架中使用
import { onMounted, onBeforeUnmount } from 'vue';
let echarts;
if (process.client) {
echarts = require('echarts');
}
onMounted(() => {
if (process.client) {
// 客户端初始化逻辑
}
});
echartsInstance.getOption()
检查当前配置echartsInstance.setOption({
tooltip: { show: true },
debugMode: true
});
vue-echarts
官方封装库echartsInstance.on('error', (err) => {
console.error('[ECharts Error]', err);
});
通过以上方案,可以在 Vue3 中高效、稳定地使用 ECharts 实现复杂可视化需求,同时保证应用的性能和可维护性。