首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue 3如何正确更新图表中的数据?

Vue 3如何正确更新图表中的数据?
EN

Stack Overflow用户
提问于 2021-03-21 19:54:29
回答 1查看 2.2K关注 0票数 3

用Vue.js 3在高图表中更新数据时出错

我有一个带有Vue.js 3的小型Week应用程序,它显示了一个高级图表图表和一些统计数据,带有用于时间过滤器的全局按钮(所有、年份、月份、周)。

每当按下一个全局按钮时,就需要更改我的高图表图表的数据。

我使用这个vue3包装器来绘制高级图表:包装器

显示初始数据(全部)就像一种魅力,但是当涉及到更新数据时,它真的很慢。这让我觉得我在更新数据时做错了什么。

我在YT:https://youtu.be/GEjHqoAElgI上上传了一个关于我的问题的视频

此外,我还在codesandbox上创建了一个最小可复制示例https://codesandbox.io/s/blissful-goldwasser-zq8je?fontsize=14&hidenavigation=1&theme=dark

它由一个Chart.vue组件组成,当按下“更新数据”按钮时,该组件将其属性"data“更新。该按钮可以切换多次,它将始终需要几秒钟,直到图表被更新。

尝试将图表中的数据作为属性提供给我的组件,并让一个监视者对该数据进行监视,以便在数据发生更改时更新图表。这是可行的,但更新图表要花费很长时间(3-5秒)。这样做的推荐方法是什么?

这是我的组成部分:

代码语言:javascript
复制
<template>
  <VueHighcharts
    class="hc"
    :options="options"
    :deepCopyOnUpdate="true"
    :redrawOnUpdate="true"
    :oneToOneUpdate="false"
    :animateOnUpdate="false"
  />
</template>

<script>
import VueHighcharts from "vue3-highcharts";

export default {
  name: "CoinChart",
  components: {
    VueHighcharts,
  },
  props: {
    stats: [Object],
  },
  data() {
    return {
      options: {
        title: {
          text: "Coins",
        },
        series: [
          {
            name: "ETH",
            data: [],
          },
          {
            name: "BTC",
            data: [],
          },
        ],
      },
    };
  },
  watch: {
    stats: {
      immidiate: true, // as pointed out in the commments, this line does not do anything
      handler: function (val) {
        // create data for chart
        const eth = new Array();
        const btc = new Array();
        this.options.series[0].data = [];
        this.options.series[1].data = [];

        for (let i in val) {
          eth.push([val[i].time * 1000, val[i].coinsPerHour]);
          btc.push([val[i].time * 1000, val[i].btcPerHour]);
        }

        // set to chart
        this.options.series[0].data = eth;
        this.options.series[1].data = btc;
      },
    },
  },
};
</script>

这简直把我逼疯了,今天花了4个小时来解决这个问题,但没有成功。甚至考虑过切换到Chart.js,但显然也没有真正支持Vue.js 3。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-22 06:47:38

我把事情搞清楚了。

显然,当您更新该系列时,高级图表将为现有系列分配新值,以便它可以计算任何动画。在你的例子中,这是相当沉重的,它需要2-3秒,这就是你所看到的。

显然,简单地丢弃图表(通过使用v-if)并用新的数据集重新呈现它会更快:

https://codesandbox.io/s/compassionate-darkness-nugv8?file=/src/components/Chart.vue:1159-1194

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66736887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档