react+echarts出现“There is a chart instance already initialized on the dom.”
写了一个关于echatrs组件,报错dom重复
配置信息从props拿
let chart;
useEffect(() => {
if (chart) {
updateChartView();
}else{
chart = echarts.init(dom.current)
updateChartView();
handleWindowResize();
}
}
}, [configOption]);
useEffect(() => {
return () => {
if (chart) {
chart.dispose(dom.current);
chart.clear();
window.resize = null;
}
window.removeEventListener("resize", handleWindowResize);
};
}, []);
react更新不能及时取定义数据,最好用usestate创建实例
修改后
const [chart, setChart] = useState(null)
const { configOption } = props;
useEffect(() => {
if (JSON.stringify(configOption) !== "{}") {
if (chart) {
// chart.setOption(configOption, true);
updateChartView();
}
}
}, [configOption]);
useEffect(() => {
let echartsInit = echarts.init(dom.current);
setChart(echartsInit);
updateChartView();
handleWindowResize();
return () => {
if (chart) {
chart.dispose(dom.current);
chart.clear();
window.resize = null;
}
window.removeEventListener("resize", handleWindowResize);
};
}, []);
组件完整代码--简单版
import React, { useEffect, useState, memo, createRef } from "react";
import { merge, debounce } from "lodash"; // 按需引入
import * as echarts from "echarts";
function Fn(props) {
const dom = createRef();
const [chart, setChart] = useState(null)
const { configOption } = props;
useEffect(() => {
if (JSON.stringify(configOption) !== "{}") {
if (chart) {
// chart.setOption(configOption, true);
updateChartView();
}
}
}, [configOption]);
useEffect(() => {
let echartsInit = echarts.init(dom.current);
setChart(echartsInit);
updateChartView();
handleWindowResize();
return () => {
if (chart) {
chart.dispose(dom.current);
chart.clear();
window.resize = null;
}
window.removeEventListener("resize", handleWindowResize);
};
}, []);
const basicOption = {
// title: {
// textStyle: {
// color: "#fff",
// },
// },
grid: {
top: 30,
right: 10,
left: 40,
bottom: 10,
containLabel: true,
},
tooltip: {
trigger: "item",
},
legend: {
top: "5%",
left: "center",
},
series: [],
};
const assembleDataToOption = () => {
if (!configOption) return;
return merge({}, basicOption, configOption);
};
/**
* 更新echart视图
*/
const updateChartView = () => {
if (!chart) return;
const fullOption = assembleDataToOption();
chart.setOption(fullOption, true);
};
/**
* 当窗口缩放时,echart动态调整自身大小
*/
const handleWindowResize = () => {
const __resizeHandler = debounce(() => {
if (chart) {
chart.resize(); // 重置echarts图形绘制区域
}
}, 100);
window.addEventListener("resize", __resizeHandler);
// 监听要是一个函数所以this.__resizeHandler,不能带()
};
return <div ref={dom} style={{ width: "100%", height: "100%" }}></div>;
}
export default memo(Fn);
react+echarts出现“There is a chart instance already initialized on the dom.”的更多相关文章
- There is a chart instance already initialized on the dom!警告
使用Echarts插件的时候,多次加载会出现There is a chart instance already initialized on the dom.这个错误,改插件已经加载完成. 并且如果你 ...
- 多次执行echarts时出现 there is a chart instance already initialized on the dom
原因,多次使用 echarts.init(document.getElementById(this.options.zid)); 解决方案 设为全局
- react+echarts/g2/bizcharts可视化图表
一.echarts的折线图的使用demo如下,linecharts为实例化的封装组件,line为实际应用的组件 cnpm install echarts import React from 'reac ...
- React+echarts (echarts-for-react) 画中国地图及省份切换
有足够的地图数据,可以点击到街道,示例我只出到市级 以umi为框架,版本是: "react": "^18.2.0", "umi": &quo ...
- react通过自己的jsx语法将两者放在一起通过虚拟dom来渲染
目前较为流行的react确实有很多优点,例如虚拟dom,单向数据流状态机的思想.还有可复用组件化的思想等等.加上搭配jsx语法和es6,适应之后开发确实快捷很多,值得大家去一试.其实组件化的思想一直在 ...
- echarts 知识点
echarts map 禁止放大缩小,设置 calculable 为 false 即可. calculable: false echarts 报错: There is a chart instance ...
- 通过百度echarts实现数据图表展示功能
现在我们在工作中,在开发中都会或多或少的用到图表统计数据显示给用户.通过图表可以很直观的,直接的将数据呈现出来.这里我就介绍说一下利用百度开源的echarts图表技术实现的具体功能. 1.对于不太理解 ...
- 时隔两个月再写的Echarts(Enterprise Charts,商业级数据图表)一文
简介 ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10 ...
- Echarts的基本用法
首先需要到导入echatrs.js文件 <script src="dist/echarts.js"></script> 路径配置 require.confi ...
- echarts 某省下钻某市地图
因为最近工作需要,接触到了highcharts 与echarts ,对比了一下,目前公司系统用的是highcharts的图表插件,就不想再去用echarts的图标插件了,奈何highcharts地图对 ...
随机推荐
- [MAUI]深入了解.NET MAUI Blazor与Vue的混合开发
@ 目录 Vue在混合开发中的特点 创建MAUI项目 创建Vue应用 使用element-ui组件库 JavaScript和原生代码的交互 传递根组件参数 从设备调用Javascript代码 从Vue ...
- db-cdc之mysql 深入了解并使用binlog
1.什么是binlog? 2.binlog可以用来干什么? 3.怎么样使用binlog? binlog是记录所有数据库表结构变更(例如CREATE.ALTER TABLE-)以及表数据修改(INSER ...
- Unity - UIWidgets 2. 控件组合
UIWidgets没有提供完整文档, 称可以去看Flutter的文档 中文 \ 英文 控件(Control)在Flutter中称为"Widget", 一个界面的若干控件是通过wid ...
- JavsScript对密码进行Base64加密和Base64解密
const password = "hello"; // 进行Base64加密 let pwd64 = window.btoa(password); console.log(pwd ...
- QT(6)-QStandardItemModel
@ 目录 1 说明 2 函数 2.1 构造函数 2.2 追加列\行 2.3 清除.删除并返回指定行或列 2.4 查找 2.5 设置水平\垂直表头项目 2.6 获得模型索引 2.7 插入 2.8 根项目 ...
- 一个基于.NET7的开源DNS服务 DnsServer 的部署使用经验分享
前言 接上篇 docker-bind 的使用搭建了一个 dns 服务,本篇将介绍另外一款 DnsServer 的部署和使用,更专注,更轻量. 特点 基于 .NET 7 实现 ,支持 Windows.L ...
- 关于MM32F001无法debug的问题
以下问题仅来自于个人的调试发现和猜测, 并不代表芯片有任何问题. 实际上我也仅仅是试用了一下. 主要发现芯片总是被锁住(FLASH被写保护?),具体如下: (1) 内存溢出时芯片被写保护, 导致再次d ...
- 从GPT定制到Turbo升级再到Assistants API,未来AI世界,你准备好了吗?
引言 在OpenAI DevDay发布会上,OpenAI再次震撼整个人工智能行业,为AI领域带来了重大的更新.CEO Sam Altman宣布推出了定制版本的ChatGPT,这意味着用户现在可以根据自 ...
- Codeforces Round #697 (Div. 3) A~E题解
写在前边 状态及其不佳,很累很困,还好\(unrated\)了 链接:Codeforces Round #697 (Div. 3) A. Odd Divisor 链接:A题链接 题目大意: 判断一个数 ...
- cookie和session的区别?一文讲透
一.问题 cookie和session的区别? 二.回答 1.总结如下- cookie: - cookie存储于客户端本地,即浏览器缓存 - cookie存储着sessionId,作为后台sessio ...