小黑账单 图表渲染失败 父子组件的生命周期钩子函数不会同步调用

news2024/9/23 11:24:04

项目场景:

记账本+ECharts图表,Vue组件间传递数据在这里插入图片描述


问题描述

图表组件中 mounted钩子中获取的list总是空的,表单组件亦然
在这里插入图片描述


PayEcharts.vue
<template>
  <div class="payEcharts">
    <div class="right"></div>
  </div>
</template>

<script>
import * as echarts from "echarts";
export default {
    props:{
        list:{
            type:Array
        }
    },
    mounted() {
        console.log('在echarts打印',this.list);
        
              this.myChart = echarts.init(document.querySelector('.right'))
              this.myChart.setOption({
                  title: {
                      text: '消费列表',
  
                      left: 'center'
                  },
                  // 提示框
                  tooltip: {
                      trigger: 'item'
                  },
  
                  // 图例
                  legend: {
                      orient: 'vertical',
                      left: 'left'
                  },
                  series: [
                      {
                          name: '消费账单',
                          type: 'pie',
                          radius: '50%',
                          series:[
                            {
                              data:this.list.map(item=>({value:item.price,name:item.name}))
                            }
                          ],
                          emphasis: {
                              itemStyle: {
                                  shadowBlur: 10,
                                  shadowOffsetX: 0,
                                  shadowColor: 'rgba(0, 0, 0, 0.5)'
                              }
                          }
                      }
                  ]
              })
          },
}
</script>

<style scoped>
 .right{
      width: 400px;
      height: 300px;
      margin-left: 30px;
      border: 1px solid black;
  }
</style>


App.vue

<template>
    <div class="app">
        <PayList @add="addFn" @del="delFn"   :list="list"></PayList>
        <PayEcharts :list="list"></PayEcharts>
    </div>
  </template>
  <script>
  import PayEcharts from './components/PayEcharts.vue';
  import PayList from './components/PayList.vue';
  import axios from 'axios'
//   import * as echarts from "echarts";
  
   /**
         * 接口文档地址:
         * https://www.apifox.cn/apidoc/shared-24459455-ebb1-4fdc-8df8-0aff8dc317a8/api-53371058
         * 
         * 功能需求:
         * 1. 基本渲染
         * 2. 添加功能
         * 3. 删除功能
         * 4. 饼图渲染
         */
  export default {
    components:{
        PayEcharts,PayList
    },
      data(){
          return {
              list:[],
          }
      },
     
      
      created(){
          this.getList()
      },
      mounted(){
        console.log('在app打印',this.list);
      },
      methods:{
        async getList(){
              const res=await axios.get('https://applet-base-api-t.itheima.net/bill',{
                  params:{
                      creator:'slx'
                  }
              })
              console.log(res.data.data)
              this.list=res.data.data
              console.log('在app的getList函数中打印',this.list);
            //   this.myChart.setOption({
            //       series:[
            //           {
            //               data:this.list.map(item=>({value:item.price,name:item.name}))
            //           }
            //       ]
            //   })
          },
        async delFn(tt){
              await axios.delete(`https://applet-base-api-t.itheima.net/bill/${tt}`)
              this.getList()
          },
  
          async addFn(obj){
              const name=obj.name
              const price=obj.price
              if(name==''){
                  return alert ('请输入有效名字')
              }
  
              await axios.post('https://applet-base-api-t.itheima.net/bill',{
              "creator": 'slx',
              "name": name,
              "price": price
              })
  
              this.getList()
          }
      }
  }
  </script>
  
  <style>
  .app{
      display: flex;
  }
  
  
 
  </style>

原因分析:

从你提供的代码中,我注意到可能出现了一个问题,可能导致图表不显示以及list数组获取不到的情况。问题出现在PayEcharts组件的mounted生命周期钩子中。

在PayEcharts组件的mounted钩子中,你尝试初始化 ECharts 实例并设置图表选项。然而,可能在这个时候,this.list 数据还没有被完全传递到子组件。这是因为父组件的mounted钩子会在子组件的mounted钩子之前被调用,因此在PayEcharts的mounted钩子中,this.list 可能尚未被父组件完全初始化。

为了解决这个问题,你可以使用一个 watch 来监听 list 数据的变化,并在 list 数据更新时重新绘制图表。这样可以确保在正确的时机进行图表的初始化和数据渲染。以下是修改后的代码示例:



解决方案:

通过使用 watch 监听 list 数据的变化,你可以确保在数据传递到子组件后再进行图表的初始化和渲染,从而解决可能导致图表不显示的问题。

PayEcharts.vue

<template>
  <div class="payEcharts">
    <div class="right"></div>
  </div>
</template>

<script>
import * as echarts from "echarts";
export default {
    props:{
        list:{
            type:Array
        }
    },
    mounted() {
    this.myChart = echarts.init(document.querySelector('.right'));
    this.renderChart();
  },
  watch: {
    list: {
      immediate: true, // Trigger the watcher immediately on component creation
      handler() {
        this.renderChart();
      },
    },
  },
  methods: {
    renderChart() {
      if (this.myChart && this.list) {  //这个删了会 在最开始有空白,图表为空
        this.myChart.setOption({
          series: [
            {
              name: '消费账单',
              type: 'pie',
              radius: '50%',
              data: this.list.map(item => ({ value: item.price, name: item.name })),
              emphasis: {
                itemStyle: {
                  shadowBlur: 10,
                  shadowOffsetX: 0,
                  shadowColor: 'rgba(0, 0, 0, 0.5)',
                },
              },
            },
          ],
        });
      }
    },
  },

}
</script>

<style scoped>
 .right{
      width: 400px;
      height: 300px;
      margin-left: 30px;
      border: 1px solid black;
  }
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/890842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Codeforces Round 893 (Div. 2) D.Trees and Segments

原题链接&#xff1a;Problem - D - Codeforces 题面&#xff1a; 大概意思就是让你在翻转01串不超过k次的情况下&#xff0c;使得a*&#xff08;0的最大连续长度&#xff09;&#xff08;1的最大连续长度&#xff09;最大&#xff08;1<a<n&#xff09;。输出n个数&…

团团代码生成器V1.0:一键生成完整的CRUD功能(提供Gitee源码)

前言&#xff1a;在日常开发的中&#xff0c;经常会需要重复写一些基础的增删改查接口&#xff0c;虽说不难&#xff0c;但是会耗费我们一些时间&#xff0c;所以我自己开发了一套纯SpringBoot实现的代码生成器&#xff0c;可以为我们生成单条数据的增删改查&#xff0c;还可以…

快速使用Linux系统中SSH

在Linux系统中&#xff0c;使用SSH代理跳板机是一种有效的方式&#xff0c;可以实现安全连接和访问远程服务器。本文将详细介绍SSH代理跳板机的设置和使用方法。 什么是SSH代理跳板机&#xff1f; SSH代理跳板机是一种在Linux系统中使用SSH协议实现的代理服务器。通过配置相关…

突破瓶颈,提升学习效率的考试培训系统

在现代社会中&#xff0c;教育和培训已经成为人们提升自我能力的重要途径。尤其在考试备考过程中&#xff0c;学习效率的提升显得尤为重要。为了帮助学习者突破学习瓶颈&#xff0c;提高学习效果&#xff0c;我们开发了一款全新的考试培训系统。 我们的系统为学习者提供了全方…

浅谈时序:set_ouput_delay

1、set_output_delay的本质 set_output_delay是对模块output信号在模块外部延迟的约束&#xff0c;本质上EDA工具会根据约束调整内部器件&#xff08;UFF0&#xff09;的类型&#xff0c;摆放位置以及组合逻辑&#xff08;C1&#xff09;以满足约束要求&#xff0c;即EDA工具保…

硬件系统工程师宝典(37)-----常用接口之EMC特性电路设计

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们介绍了一些常用总线&#xff0c;如I2C、SPI、I2S、CAN总线&#xff0c;另外分析了常用的逻辑电平TTL和CMOS以及电平之间互连的方式。今天我们…

shell脚本基础————表达式

目录 一、shell类型 类型 查看系统中支持的shell 查看系统默认shell 二、变量 一、组成 一、变量名 声明规范 声明方法 二、变量值 二、类型 一、系统内置变量&#xff08;环境变量&#xff09; 二、自定义变量 数字 字符串 引号的用法 三、位置变量 四、预定义…

机器学习深度学习——transformer(机器翻译的再实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——自注意力和位置编码&#xff08;数学推导代码实现&#xff09; &#x1f4da;订阅专栏&#xff1a;机器…

【Python程序设计】基于Python Flask的上海美食信息与可视化宣传网站项目-附下载方式以及往届优秀论文,原创项目其他均为抄袭

基于Python Flask的上海美食信息与可视化宣传网站 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 随着大数据和人工智能技术的迅速发展&#xff0c;我们设计并开发了一款基于大数据的上海美食系统。该系…

python使用matplotlib实现折线图的绘制

一、意义 数据可视化可以以简洁的方式呈现出数据&#xff0c;发现众多数据中隐藏的规律和意义。Matplotlib是一个数学绘图库。利用它可以制作简单的图表&#xff08;散点图、折线图&#xff09;。然后&#xff0c;将基于漫步概念生成一个更有趣的数据集–根据一系列随机决策生成…

Android学习--JNI

文章目录 JNI(Java Native Interface)NDK(Native Development Kit)一、创建一个JNI项目1.创建项目2.C文件字段说明1. Extern “C”2. JNIEXPORTh和JNICALL3. JNI接口命名规则4. JNIEnv5. jclass和jobject6. 数据类型7.JNI函数签名信息 二、JNI实现1.简单实现2.静态注册3.动态注…

Tomcat 一次请求的生命周期

在使用 Tomcat 的时候&#xff0c;我们只需要在 Servlet 实现类中写我们的业务逻辑代码即可&#xff0c;不需要管 Socket 连接、协议处理要怎么实现&#xff0c;因为这部分作为不经常变动的部分&#xff0c;被封装到了 Tomcat 中&#xff0c;程序员只需要引入 Tomcat 中即可&am…

DNNGP、DeepGS 和 DLGWAS模型构成对比

一、DNNGP DNNGP 是基于深度卷积神经网络&#xff0c;这个结构包括一个输入层&#xff0c;三个卷积层&#xff0c;一个批标准化层&#xff0c;两个dropout层&#xff0c;一个平坦化层&#xff0c;一个 dense层。 dropout层&#xff1a;在神经网络中,dropout层是一个非常有效的正…

拿捏--->打印爱心(小心机表白)

文章目录 题目描述算法思路代码示例思路一思路二 题目描述 利用java语言编写算法在控制台打印爱心算法 算法思路代码示例 思路一 打印心形主要分为上下两部分&#xff0c;如图&#xff1a; 下边主要是一个倒立三角形&#xff0c;容易打印。 上边可以分为左右两部分&#…

【数据结构】堆的初始化——如何初始化一个大根堆?

文章目录 源码是如何插入的&#xff1f;扩容向上调整实现大根堆代码&#xff1a; 源码是如何插入的&#xff1f; 扩容 在扩容的时候&#xff0c;如果容量小于64&#xff0c;那就2倍多2的扩容&#xff1b;如果大于64&#xff0c;那就1.5倍扩容。 还会进行溢出的判断&#xff0c…

NPDP含金量高吗?难考吗?

一&#xff0c;什么是NPDP认证&#xff1f; NPDP认证中文名为产品经理国际资格认证&#xff0c;New Product Development Professional (NPDP) &#xff0c;是由美国 产品开发与管理协会 (PDMA) 所发起&#xff0c; 是国际公认的唯一的新产品开发专业认证&#xff0c;集理论、方…

论文及代码详解——可变形卷积(DCNv2)

文章目录 论文详解Stacking More Deformable Conv LayersModulated Deformable ModulesR-CNN Feature Mimicking 代码详解 DCNv2 是在DCNv1的基础上的改进版。 理解DCNv2之前&#xff0c;建议先读 《论文及代码详解——可变形卷积&#xff08;DCNv1&#xff09;》 论文详解 DC…

数据结构单链表

单链表 1 链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。 在我们开始讲链表之前&#xff0c;我们是写了顺序表&#xff0c;顺序表就是类似一个数组的东西&#xff0…

651页23万字智慧教育大数据信息化顶层设计及建设方案WORD

导读&#xff1a;原文《651页23万字智慧教育大数据信息化顶层设计及建设方案WORD》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 目录 一、 方案背景 1.1 以教育…

三、数据类型

1、数值类型 &#xff08;1&#xff09;分类&#xff1a; &#xff08;2&#xff09;注意&#xff1a; 存储某一类数据&#xff0c;如果只想要表示整数&#xff0c;则在其后加unsigned即可&#xff1b; 在表示小数时&#xff0c;需要指明该小数的总长度和小数部分的长度&…