当前位置: 首页 > news >正文

封装的echarts子组件使用watch监听option失效的问题

项目场景:

我在项目里面封装了一个echarts组件,组件接收一个来自外部的option,然后我用了一个watch函数去监听这个option的变化,option变化之后,销毁,然后再新建一个charts表

碎碎念

问题如标题所示,这篇文章屯了蛮久了,其实我也不太记得大概是啥问题了,但感觉解决方法挺有意思的,暂时就先记录一下吧。记得当时排查问题,这个还有个啥其他的问题,但是被我解决了,

基本上这种类似的问题,都可以通过注释或者报错定位,慢慢排查错误来源,当然浏览器debug也可以,不过我对自己的代码比较熟悉,而且层级嵌套也不深,所以一般用不到debug


解决方案:

这里提供两种方案供大家解决

方法1:watch 的第一个参数改为 ()=> props.option

type Prop = {option: EChartsOption | null;
};const props = defineProps<Prop>();const echarts = inject(myInjectionEcharts);
let mycharts;watch(() => props.option,() => {if (props.option) {window.removeEventListener("resize", mycharts.__resize);echarts.dispose(mycharts);initCharts(props.option);}},
);

方法2:将这个props用toRefs包裹之后再把option结构出来,watch 去监听这个option

type Prop = {option: EChartsOption | null;
};const props = defineProps<Prop>();
const { option } = toRefs(props);const echarts = inject(myInjectionEcharts);
let mycharts;watch(option,() => {if (props.option) {window.removeEventListener("resize", mycharts.__resize);echarts.dispose(mycharts);initCharts(props.option);}},
);

理解与排查思路

首先,我们要明确watch的使用(本来想给大家翻找一下vue3中文文档的,笑死,今天他好像崩了),

watch 的定义如下:监视一个或多个反应性数据源,并在源发生更改时调用回调函数。

他的第一个参数,只能是下面这些:

翻译来说: 1. 返回一个值的getter方法,2.ref  3. reactive 4. 由上面这几种组成的数组?

总的来说就是,他只监听响应式的数据。

而我之前的错误写法,如下:

type Prop = {option: EChartsOption | null;
};const props = defineProps<Prop>();const echarts = inject(myInjectionEcharts);
let mycharts;watch(props.option,() => {if (props.option) {window.removeEventListener("resize", mycharts.__resize);echarts.dispose(mycharts);initCharts(props.option);}},
);

这个Prop是响应式的,好像是类似reactive包裹的一个对象(有点不记得了,明天我验证一下),

而我这个props.option 这个响应式里面的对象是不带响应式的,所有可以用到如官网所示的一种方法,把他变成一个getter的写法

 而第二种则是借助到 toRefs()

toRefs() 批量处理对象中的所有属性,第一层,变成响应式
toRef() 需要传参,且只能将一个属性变成响应式

 

如官网所示,这种将响应式对象的内部熟悉变为响应式,再解构出来的方法,倒也是蛮常规的。

就是上面的方法2 。

求关注啦,求点赞啦,每次写这种解决bug的文章都没啥人愿意给我点个小赞,哭死,呜呜呜

相关文章:

封装的echarts子组件使用watch监听option失效的问题

项目场景&#xff1a; 我在项目里面封装了一个echarts组件&#xff0c;组件接收一个来自外部的option,然后我用了一个watch函数去监听这个option的变化&#xff0c;option变化之后&#xff0c;销毁&#xff0c;然后再新建一个charts表 碎碎念 问题如标题所示&#xff0c;这篇…...

爬虫入门到精通_框架篇14(PySpider架构概述及用法详解)

官方文档 Sample Code&#xff1a; from pyspider.libs.base_handler import *class Handler(BaseHandler):crawl_config {}# minutes24 * 60&#xff1a;每隔一天重新爬取every(minutes24 * 60)def on_start(self):self.crawl(http://scrapy.org/, callbackself.index_page)…...

WPF DataGrid常用属性

AlternationCount属性&#xff1a;表示有几行不同的颜色来回替换&#xff0c;如果设置2则表示有两个颜色交替循环 AutoGenerateColumns属性&#xff1a;是否生成列 CanUserAddRows属性&#xff1a;用户是否可以添加行 CanUserDeleteRows属性&#xff1a;用户是否可以删除行 …...

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Stepper)

步骤导航器组件&#xff0c;适用于引导用户按照步骤完成任务的导航场景。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 仅能包含子组件StepperItem。 接口 Stepper(value?: { index?…...

Python基础语法:基本数据类型(列表)

现实世界中总是存在一组一组的事物。"组"的概念作为基本数据类型的一种&#xff0c;它也是来源于我们去解决现实生活中的一些问题而产生的。它需要有“组”这样的一个数据类型来丰富我们的基本数据类型。 那么在Python中如何来表示“组”的概念呢&#xff1f; 在Py…...

神经网络线性量化方法简介

可点此跳转看全篇 目录 神经网络量化量化的必要性量化方法简介线性对称量化线性非对称量化方法神经网络量化 量化的必要性 NetworkModel size (MB)GFLOPSAlexNet2330.7VGG-1652815.5VGG-1954819.6ResNet-50983.9ResNet-1011707.6ResNet-15223011.3GoogleNet271.6InceptionV38…...

阿里云k8s内OSS报错UnKnownHost。

这个问题就是链接不上oss属于网络问题&#xff1a; 1.排查服务器 在服务器&#xff08;ecs&#xff09;上直接ping oss地址看是否能够通。 不通就要修改dns和hosts&#xff08;这个不说&#xff0c;自己网上查&#xff09; 2.排查容器 进去ping一下你的容器是否能访问到oss…...

nginx的使用,homebrew安装及使用nginx。

Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;它提供了诸如 IMAP、POP3 和 SMTP 等邮件代理服务。以下是 Nginx 的主要作用&#xff1a;12345 作为 Web 服务器。Nginx 能够以较少的系统资源提供高效率的服务&#xff0c;尤其在高并发连接下表现出色。1…...

计算机等级考试:信息安全技术 知识点六

1、P2DR模型是美国ISS公司提出的动态网络安全体系的代表模型&#xff0c;可用数学公式表达为Pt>DtRt&#xff0c;其中Pt表示&#xff1a;系统防护时间。 2、美国联邦政府颁布数字签名标准(Digital Signature Standard&#xff0c;DSS)的年份是1994 3、密码分析者(攻击者)已…...

vue provide 与 inject使用

在vue项目中&#xff0c;如果遇到跨组件多层次传值的话&#xff0c;一般会用到vuex&#xff0c;或者其他第三方共享状态管理模式&#xff0c;如pinia等&#xff0c;但是对于父组件与多层次孙子组件时&#xff0c;建议使用provide 与 inject&#xff0c;与之其他方式相比&#x…...

Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?

开始之前 Composition API 可以说是Vue3的最大特点&#xff0c;那么为什么要推出Composition Api&#xff0c;解决了什么问题&#xff1f; 通常使用Vue2开发的项目&#xff0c;普遍会存在以下问题&#xff1a; 代码的可读性随着组件变大而变差每一种代码复用的方式&#xff…...

php集成修改数据库的字段

1.界面效果 2.代码 <?phpecho <form action"" method"post"><label for"table">表名:</label><input type"text" id"table" name"table"><br><div id"fieldsContaine…...

爬虫技术之正则提取静态页面数据

第一天 简单示例 在爬虫过程中&#xff0c;我们获取到了页面之后&#xff0c;通常需要做的就是解析数据&#xff0c;将数据持久化到数据库为我所用。如何又快又准确得提取有效数据&#xff1f;这是一门技术&#xff0c;看了我的博客之前可能略有难度&#xff0c;但各位大师看…...

字符串匹配算法:暴力匹配、KMP 算法、Boyer-Moore 算法、Rabin-Karp 算法

字符串匹配算法 字符串匹配算法是在一个字符串&#xff08;称为文本&#xff09;中查找另一个字符串&#xff08;称为模式&#xff09;出现的位置或者是否存在的算法。常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法和Rabin-Karp算法。下面是对这些算法的简要介…...

微信小程序接入百度地图(微信小程序插件)使用文档

第一步配置域名 :在微信公众平台登录后配置服务域名称:https://apis.map.qq.com 第二步申请密钥 申请开发者密钥申请地址 第三步使用插件 选择添加插件 搜索腾讯位置服务地图选点 选择要授权的小程序 授权完毕会在这里显示插件信息 第四步查看使用文档 跳转至文…...

如果需要在Log4j中记录特定的异常信息,应该如何实现?如何动态地更改Log4j的日志级别?

如果需要在Log4j中记录特定的异常信息&#xff0c;应该如何实现&#xff1f; 在Log4j中记录特定的异常信息&#xff0c;你可以使用Logger类的error、warn、info等方法&#xff0c;这些方法通常接受一个字符串消息和一个Throwable对象&#xff08;如异常&#xff09;作为参数。下…...

Rust入门:C++和Rust动态库(dll)的相互调用

无论是C调用Rust动态库还是Rust调用C动态库&#xff0c;其操作基本都是一样地简单&#xff0c;基本和C调用C的动态库没什么区别&#xff0c;只需要列出所需要导入的函数&#xff0c;并链接到相应的lib文件即可。 这里&#xff0c;在windows中&#xff0c;我们以dll动态库为例说…...

第三篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas股票市场数据分析

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas进行股票市场数据分析常见步骤和示例代码1. 加载数据2. 数据清洗和准备3. 分析股票价格和交易量4. 财务数据分析 二、扩展思路介绍1. 技术指标分析2. 波动性分析3. 相关性分析4.…...

3.11笔记2

目前使用的格里高利历闰年的规则如下&#xff1a; 公元年分非4的倍数&#xff0c;为平年。公元年分为4的倍数但非100的倍数&#xff0c;为闰年。公元年分为100的倍数但非400的倍数&#xff0c;为平年。公元年分为400的倍数为闰年。 请用一个表达式 (不能添加括号) 判断某一年…...

web服务器基础

目录 web服务器简介 (1)什么是www (2)网址及HTTP简介 (3)http协议请求的工作流程 主配置文件内的参数 目录标签 缺点 虚拟主机vhosts 示例的格式如下 实例 多IP实现多网页 修改监听端口号 hosts文件及域名解析 修改hosts文件内缓存格式 实现效果 实现多域名解析IP地址 在linux…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...