首页 > 其他分享 >vue3封装echarts组件数据更新不同步问题

vue3封装echarts组件数据更新不同步问题

时间:2023-07-10 18:23:59浏览次数:34  
标签:封装 option vue3 value props 组件 echarts

vue3封装echarts组件数据更新不同步问题

背景:

​ 记录一下项目中遇到的bug,在vue3+echarts环境下,为了方便使用,我将echarts封装成组件使用,使用的时候只需要把对应的值传入给chart组件就行,但是在传入真实数据的时候遇到了问题,就是传入value值与图表组件显示的数值不一致。(如图)

image-20230710144057583


原因分析:

​ 一开始就想到是元素生成的时候,props值的改变没有跟上,于是图表就没有动态的更新上,基于这点展开排查;

​ 原来:在组件中,defineProps接收了传入的参数本身是个代理类型的对象(Proxy),他是响应式的,但是,由于我在曲线图配置选项的option中,是通过,props.value来获取到他的部分属性,这个时候option对象就失去了响应式;


解决方法:

​ 在组件中添加监听方法,watch(props.value,()=>{....}) 在回调方法中修改option选项的data值,就能够解决数据不同步刷新问题;

出乎意料的发现:

​ 在排查过程中,发现,如果对于option的data属性我直接这样赋值:

​ data:[ props ],

数据的动态同步也能够实现!

我猜测估计是赋值的时候,如果是一个代理对象(Proxy),name他会默认选中字段中的名字为value的属性进行赋值,就类似 props.value!!

​ 通过更改defineProps中定义的属性名字,以及设置多个同为number类型的参数,发现,在 data:[ props ] 的情况下,系统会自动将其中名字为value的值注入!!

标签:封装,option,vue3,value,props,组件,echarts
From: https://www.cnblogs.com/lemonaaa/p/17541912.html

相关文章

  • 浏览器全屏时 echarts.resize() 无效/滞后解决办法
    前言echarts在dom上初始化时使用 echarts. init ,这个dom是实例容器,一般是一个具有高宽的DIV元素。不能在单个容器上初始化多个ECharts实例。 echartsInstance.resize 改变图表尺寸,在容器大小发生改变时需要手动调用。echarts.resize()的核心是监听id=“myCh......
  • 封装、抽象、继承、多态
    封装1、封装的定义封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据。在java中,private、public等关键字就是访问权限控制语法。private关键字修饰的属性只能类本身访问,可以保护其不被类之外的代码直接访问。......
  • 小程序函数全集封装
    /***Createdbyzrs*/importVuefrom'vue'/***json拼接为字符串*@paramjson*@returns{string}*/exportfunctionqs(json){letstr=''for(letkeyinjson){if(json.hasOwnProperty(key)){str+=key+'......
  • 创建Vue3.0工程
    使用vue-cli创建官方文档:https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create##查看@vue/cli版本,确保@vue/cli版本在4.5.0以上vue--version##安装或者升级你的@vue/clinpminstall-g@vue/cli##创建vuecreatevue_test##启动cdvue_testnpmr......
  • TypeScript+Vue3
    TypeScriptAny类型和unknown顶级类型1.没有强制限定哪种类型,随时切换类型都可以我们可以对any进行任何操作,不需要检查类型2.声明变量的时候没有指定任意类型默认为any3.弊端如果使用any就失去了TS类型检测的作用4.TypeScript3.0中引入的unknown类型也被认为是top......
  • vue3.0 外部配置文件
    vue3.0外部配置文件,重点是打包后也可以修改配置参数 一、在public中创建static文件夹,在static文件夹中创建config.js文件config.js{"webSocketUrl":"http://192.168.1.5:5011/httpCli"}二、在man.js中使用 axios来读取存在app.config.globalProperties.$......
  • 微信小程序taro-react-echarts使用dataZoom问题
    taro微信小程序中使用taro-react-echarts展示图表数据,因为数据量大,需要使用dataZoom来左右滑动图表。实现效果解决首先在echarts的options中添加xAxis:...yAxis:...dataZoom:[{type:'inside',start:0,end:data.time?.length>20?(20/data.time......
  • vue3使用表格el-table-infinite-scroll.js:18 Uncaught (in promise) Error: [el-tabl
    先看下表格里面有没有这个el-scrollbar__wrapclass类 没有的话升级一下element-plus到最新的就行你可以先查看element-plus的版本npmview element-plus下载完之后 就有了......
  • 13:vue3 插槽 slot
    1、插槽基础知识用Parent.vue,导入SlotBase.vue组件1<template>2<SlotBase>3<div>4<h3>插槽标题</h3>5<p>插槽内容</p>6</div>7</SlotBase>8</template>......
  • Vue3主要的响应类方法(ref、reactive、toRef、toRefs)
    1.Vue.ref()1.1.可以为单个属性添加响应式状态。1.2.可以为对象添加响应式状态,当给对象的某个属性单独ref后,改变后的属性值不会同时改变原始值。1.3.访问数据值,需要添加.value。1.4.原始数据的拷贝。(原始数据不被改变)2.Vue.reactive()2.1.给对象添加响应式状态2.2.访问数据值......