VUE3+Echarts 图表toolTip无法正常显示

const chartInstance = shallowRef<echarts.ECharts | null>(null);

这个地方必须使用shallowRef才能正常展示tooltip 一开始用的ref,就是不行

使用shallowRef而非ref解决ECharts的tooltip显示问题。由于shallowRef仅对引用本身进行响应式跟踪,不递归监听对象内部变化,更适合处理ECharts实例这类复杂对象,避免了深度响应式转换可能导致的性能问题和功能异常。而ref的深度响应特性可能干扰ECharts的内部机制,导致tooltip无法正常显示。 

### Vue3ECharts Tooltip 显示的解决方案 在 Vue3 项目中使用 ECharts 时,如果遇到 `tooltip` 提示框显示的问题,通常是由以下几个原因引起的: #### 1. **ECharts 实例应作为响应式对象** 当将 ECharts 实例赋值给 `ref()` 或其他深层次响应式对象时,可能会导致 `tooltip` 功能失效。这是因为 ECharts 的实例本身并需要成为响应式对象,而将其转换为响应式对象可能会影响其内部逻辑[^2]。 解决方法是使用 `shallowRef()` 来替代 `ref()`,或者直接将 ECharts 实例保存在一个普通的 JavaScript 变量中。以下是推荐的做法: ```javascript import { shallowRef, onMounted } from &#39;vue&#39;; import * as echarts from &#39;echarts&#39;; export default { setup() { const myChart = shallowRef(null); onMounted(() => { const chartDom = document.getElementById(&#39;chart-demo&#39;); if (chartDom) { myChart.value = echarts.init(chartDom); myChart.value.setOption({ tooltip: { trigger: &#39;axis&#39;, show: true, }, xAxis: { type: &#39;category&#39;, data: [&#39;Mon&#39;, &#39;Tue&#39;, &#39;Wed&#39;, &#39;Thu&#39;, &#39;Fri&#39;, &#39;Sat&#39;, &#39;Sun&#39;], }, yAxis: { type: &#39;value&#39;, }, series: [ { data: [150, 230, 224, 218, 135, 147, 260], type: &#39;line&#39;, }, ], }); } }); return {}; }, }; ``` #### 2. **Tooltip 配置项检查** 即使解决了响应式问题,仍需确认 `tooltip` 的配置是否正确。默认情况下,`tooltip.show` 属性为 `true`,但如果显式设置了 `false`,则会导致提示框显示[^3]。 确保 `tooltip` 的配置如下所示: ```javascript { tooltip: { trigger: &#39;axis&#39;, // 设置为 &#39;axis&#39; 或 &#39;item&#39; show: true, // 显式启用 tooltip }, } ``` #### 3. **MarkRaw 方法的应用** 另一种方式是通过 `markRaw` 将 ECharts 实例标记为可被转为代理的对象。这同样可以避免因响应式机制引发的问题[^3]。 ```javascript import { markRaw, onMounted } from &#39;vue&#39;; import * as echarts from &#39;echarts&#39;; export default { setup() { let echartInstance; onMounted(() => { const chartDom = document.getElementById(&#39;chart-demo&#39;); if (chartDom) { echartInstance = markRaw(echarts.init(chartDom)); echartInstance.setOption({ tooltip: { trigger: &#39;axis&#39;, show: true, }, xAxis: { type: &#39;category&#39;, data: [&#39;Mon&#39;, &#39;Tue&#39;, &#39;Wed&#39;, &#39;Thu&#39;, &#39;Fri&#39;, &#39;Sat&#39;, &#39;Sun&#39;], }, yAxis: { type: &#39;value&#39;, }, series: [ { data: [150, 230, 224, 218, 135, 147, 260], type: &#39;line&#39;, }, ], }); } }); return {}; }, }; ``` #### 4. **DOM 初始化顺序** 还需注意 DOM 节点初始化的时间点。如果在调用 `echarts.init()` 之前目标节点尚未渲染完成,则可能导致图表无法正常工作。因此建议始终在 `onMounted` 生命周期钩子中执行相关操作[^4]。 --- ### 总结 综上所述,在 Vue3 中使用 ECharts 时,为了避免 `tooltip` 显示的问题,需要注意以下几点: - 使用 `shallowRef` 替代 `ref` 处理 ECharts 实例; - 确认 `tooltip` 配置无误; - 利用 `markRaw` 标记 ECharts 实例为非响应式对象; - 正确管理 DOM 渲染时机。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值