查看: 356|回复: 0

Vue3引入ECharts实现图表组件的初始化配置与销毁清理

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
在 Vue 3 项目中做数据可视化时,ECharts 是一个非常常用的图表库。它本身不依赖具体框架,因此只需要在组件里手动管理实例的创建、更新和销毁。下面从安装开始,逐步演示如何在 Vue 3 组件中集成 ECharts,并实现一个柱状图。

一、安装 ECharts

打开终端,在 Vue 3 项目根目录执行以下任一命令即可。

使用 npm:
  1. npm install echarts --save
复制代码

或者使用 yarn:
  1. yarn add echarts
复制代码

安装完成后,ECharts 会写入 package.json 的 dependencies 中,可以直接在组件代码里 import。

二、在 Vue 组件中引入并创建柱状图

首先准备一个容器元素,ECharts 需要基于一个具有宽高的 DOM 节点完成初始化。在 Vue 模板中给这个节点绑定 ref,便于在脚本中获取。

下面是完整的单文件组件示例:
  1. <template>
  2.   <div ref="chartContainer" style="width: 600px; height: 400px;"></div>
  3. </template>
  4. <script>
  5. import * as echarts from 'echarts';
  6. export default {
  7.   name: 'BarChart',
  8.   data() {
  9.     return {
  10.       chartInstance: null
  11.     };
  12.   },
  13.   mounted() {
  14.     this.initChart();
  15.   },
  16.   beforeUnmount() {
  17.     // 组件销毁前释放 ECharts 实例,避免内存泄漏
  18.     if (this.chartInstance) {
  19.       this.chartInstance.dispose();
  20.       this.chartInstance = null;
  21.     }
  22.   },
  23.   methods: {
  24.     initChart() {
  25.       // 通过 ref 获取 DOM 容器,初始化图表实例
  26.       this.chartInstance = echarts.init(this.$refs.chartContainer);
  27.       // 配置项:标题、提示框、图例、坐标轴、系列数据
  28.       const option = {
  29.         title: {
  30.           text: 'ECharts 入门示例'
  31.         },
  32.         tooltip: {},
  33.         legend: {
  34.           data: ['销量']
  35.         },
  36.         xAxis: {
  37.           data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
  38.         },
  39.         yAxis: {},
  40.         series: [{
  41.           name: '销量',
  42.           type: 'bar',
  43.           data: [5, 20, 36, 10, 10, 20]
  44.         }]
  45.       };
  46.       // 调用 setOption 让图表渲染出来
  47.       this.chartInstance.setOption(option);
  48.     }
  49.   }
  50. };
  51. </script>
  52. <style scoped>
  53. /* 可以按项目需要覆盖容器样式 */
  54. </style>
复制代码

代码中的关键点如下:

ref 的名字要和 this.$refs 中访问的名字保持一致,这里使用 chartContainer。容器必须有明确宽度和高度,否则 ECharts 初始化后可能无法正常显示。

初始化动作放在 mounted 生命周期里执行,这样能保证 DOM 已经真实渲染完成,再调用 echarts.init 才安全。

option 是 ECharts 的核心配置对象。xAxis.data 定义类目轴的值,series 中的 type: 'bar' 决定图表类型为柱状图,series.data 与 xAxis.data 一一对应。yAxis 留空也能自动根据数据生成坐标刻度,更复杂的样式可参考官方文档逐一调整。

三、正确管理图表实例

示例中把图表实例保存在组件的 data 中,命名为 chartInstance。这样做的好处是:

initChart 和后续的更新方法都能访问同一个实例。

组件销毁时可以在生命周期钩子中调用 dispose 释放资源。

如果只在 initChart 内部声明局部变量,虽然第一次渲染没问题,但之后想要更新图表或销毁实例就会找不到引用,因此组件级保存实例是更规范的做法。

四、响应式更新图表数据

ECharts 实例的 setOption 方法既负责首次渲染,也负责后续的数据更新。当业务数据发生变化时,不需要重新初始化图表,只需要调用一次 setOption 并传入新的数据即可。

例如可以新增一个方法:
  1. updateChart() {
  2.   if (!this.chartInstance) {
  3.     return;
  4.   }
  5.   this.chartInstance.setOption({
  6.     series: [{
  7.       name: '销量',
  8.       type: 'bar',
  9.       data: [12, 28, 41, 16, 32, 18]
  10.     }]
  11.   });
  12. }
复制代码

调用 updateChart 后,原有柱状图会平滑过渡到新数据。注意:setOption 默认会合并配置,因此只需要提供变化的部分,其他配置项会保留。

五、组件销毁时的清理逻辑

Vue 3 中可以使用 beforeUnmount 或 unmounted 钩子执行清理工作。ECharts 实例内部会绑定浏览器事件和定时器,如果不主动 dispose,组件频繁创建销毁后容易造成内存占用过高。

在 beforeUnmount 中做如下判断即可:
  1. beforeUnmount() {
  2.   if (this.chartInstance) {
  3.     this.chartInstance.dispose();
  4.     this.chartInstance = null;
  5.   }
  6. }
复制代码

dispose 会销毁图表实例并释放相关 DOM 事件;将 chartInstance 置为 null 可以避免后续误调用。

六、适用场景

这个模式适合在 Vue 3 的普通页面、管理后台甚至大屏项目中直接使用。只要容器存在,mounted 中初始化一次,后续通过 setOption 更新数据,并在离开页面时销毁,就能稳定地提供图表能力。如果是更大型的项目,还可以把 echarts.init 封装成自定义 Hook 或独立工具函数,但核心的实例生命周期管理逻辑与此一致。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-2 17:02 , Processed in 0.021401 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部