Skip to content

[Bug] ECharts Tooltip 不显示问题 - Vue Ref vs 普通变量 #21267

@trry-hub

Description

@trry-hub

Version

6.0.0

Link to Minimal Reproduction

https://github.com/trry-hub/issues/tree/echarts

Steps to Reproduce

复现步骤

方法一:使用普通变量(tooltip 正常工作)

let chartInstance: null | echarts.ECharts = null
const chartDom = ref()

async function renderChart() {
  if (!chartInstance) {
    chartInstance = echarts.init(chartDom.value)
  }
  chartInstance.setOption(option)
}

方法二:使用 Vue ref(tooltip 不工作)

const chartInstanceVueRef = ref()
const chartDomUseRef = ref()

async function renderChartUseRef() {
  if (!chartInstanceVueRef.value) {
    chartInstanceVueRef.value = echarts.init(chartDomUseRef.value)
  }
  chartInstanceVueRef.value.setOption(option)
}

Current Behavior

在 Vue 3 + ECharts 项目中,当使用 Vue 的 ref() 来存储 ECharts 实例时,图表的 tooltip 无法正常显示。但使用普通变量存储 ECharts 实例时,tooltip 可以正常工作。

Expected Behavior

两种方法都应该能够正常显示 tooltip,当鼠标悬停在图表上时应该显示相应的数据信息。

Environment

System:
    OS: macOS 15.6.1
    CPU: (8) arm64 Apple M1
    Memory: 94.39 MB / 16.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 22.19.0 - ~/.volta/tools/image/node/22.19.0/bin/node
    npm: 10.9.3 - ~/.volta/tools/image/node/22.19.0/bin/npm
    pnpm: 10.15.1 - ~/.volta/bin/pnpm
  Browsers:
    Chrome: 140.0.7339.133
    Safari: 18.6

Any additional comments?

可能的原因分析

  1. Vue 响应式系统干扰: Vue 的 ref 会将对象包装成响应式代理,可能影响 ECharts 内部的事件绑定机制
  2. 事件监听器绑定问题: ECharts 的 tooltip 依赖于 DOM 事件,响应式代理可能影响事件监听器的正确绑定
  3. 实例引用问题: 通过 ref 访问的 ECharts 实例可能与原始实例存在差异

临时解决方案

目前使用普通变量而非 Vue ref 来存储 ECharts 实例可以避免此问题。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions