vant2报错 [ECharts] Can't get DOM width or height.

3,604 阅读1分钟

报错信息: [ECharts] Can't get DOM width or height. Please check dom.clientWidth and dom.clientHeight. They should not be 0.For example, you may need to call this in the callback of window.onload.

Uncaught TypeError: Cannot read properties of null (reading "width').

series not exists. Legend data should be same with series name or data name.

最近在写app页面时使用了vant2中的 tab 组件和swipe组件。

tab组件

Snipaste_2023-07-25_20-39-18.png

swipe组件

Snipaste_2023-07-25_20-40-23.png

其中出现了3个报错:

Snipaste_2023-07-25_17-40-03.png

Snipaste_2023-07-25_17-12-38.png

Snipaste_2023-07-25_17-11-51.png

结果看vant文档发现,写的明明白白:

tab组件的文档:

常见问题

组件从隐藏状态切换到显示状态时,底部条位置错误?

Tabs 组件在挂载时,会获取自身的宽度,并计算出底部条的位置。如果组件一开始处于隐藏状态,则获取到的宽度永远为 0,因此无法展示底部条位置。

解决方法

方法一,如果是使用 v-show 来控制组件展示的,则替换为 v-if 即可解决此问题:

before: <vant-tabs v-show="show" /> after: <vant-tabs v-if="show" />

方法二,调用组件的 resize 方法来主动触发重绘:

<van-tabs v-show="show" ref="swipe" />

this.$refs.swipe.resize();

swipe组件的文档:

组件从隐藏状态切换到显示状态时,无法正确渲染?

Swipe 组件在挂载时,会获取自身的宽度,并计算出轮播图的位置。如果组件一开始处于隐藏状态,则获取到的宽度永远为 0,因此无法正确计算位置。

解决方法

方法一,如果是使用 v-show 来控制组件展示的,则替换为 v-if 即可解决此问题:

before: <vant-swipe v-show="show" /> after: <vant-swipe v-if="show" />

方法二,调用组件的 resize 方法来主动触发重绘:

<van-swipe v-show="show" ref="swipe" />

this.$refs.swipe.resize();

也就是说,把v-show换成v-if就OK了(我的做法就是这样)。
第三个报错也没了(这个不知啥原因)。