写了一个关于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.”的更多相关文章

  1. There is a chart instance already initialized on the dom!警告

    使用Echarts插件的时候,多次加载会出现There is a chart instance already initialized on the dom.这个错误,改插件已经加载完成. 并且如果你 ...

  2. 多次执行echarts时出现 there is a chart instance already initialized on the dom

    原因,多次使用 echarts.init(document.getElementById(this.options.zid)); 解决方案 设为全局

  3. react+echarts/g2/bizcharts可视化图表

    一.echarts的折线图的使用demo如下,linecharts为实例化的封装组件,line为实际应用的组件 cnpm install echarts import React from 'reac ...

  4. React+echarts (echarts-for-react) 画中国地图及省份切换

    有足够的地图数据,可以点击到街道,示例我只出到市级 以umi为框架,版本是: "react": "^18.2.0", "umi": &quo ...

  5. react通过自己的jsx语法将两者放在一起通过虚拟dom来渲染

    目前较为流行的react确实有很多优点,例如虚拟dom,单向数据流状态机的思想.还有可复用组件化的思想等等.加上搭配jsx语法和es6,适应之后开发确实快捷很多,值得大家去一试.其实组件化的思想一直在 ...

  6. echarts 知识点

    echarts map 禁止放大缩小,设置 calculable 为 false 即可. calculable: false echarts 报错: There is a chart instance ...

  7. 通过百度echarts实现数据图表展示功能

    现在我们在工作中,在开发中都会或多或少的用到图表统计数据显示给用户.通过图表可以很直观的,直接的将数据呈现出来.这里我就介绍说一下利用百度开源的echarts图表技术实现的具体功能. 1.对于不太理解 ...

  8. 时隔两个月再写的Echarts(Enterprise Charts,商业级数据图表)一文

    简介 ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10 ...

  9. Echarts的基本用法

    首先需要到导入echatrs.js文件 <script src="dist/echarts.js"></script> 路径配置 require.confi ...

  10. echarts 某省下钻某市地图

    因为最近工作需要,接触到了highcharts 与echarts ,对比了一下,目前公司系统用的是highcharts的图表插件,就不想再去用echarts的图标插件了,奈何highcharts地图对 ...

随机推荐

  1. 每个后端都应该了解的OpenResty入门以及网关安全实战

    简介 在官网上对 OpenResty 是这样介绍的(http://openresty.org): "OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成 ...

  2. 13. 从零开始编写一个类nginx工具, HTTP中的压缩gzip,deflate,brotli算法

    wmproxy wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感 ...

  3. 一个Unity富文本插件的实现思路

    项目中原来的富文本组件不太好用,做了一些修改,记述主要思路.缺陷很多. 仅适用于没用TextMeshPro,且不打算用的项目,否则请直接用TextMeshPro 原组件特点: 使用占位符模式,创建新的 ...

  4. LAMP配置与应用

    LAMP配置与应用 1.1 动态资源和语言 WEB 资源类型: 静态资源:原始形式与响应内容一致,在客户端浏览器执行 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端 ...

  5. Chromium gclient使用

    gclient 是由 Google 用 Python 开发的一套跨平台的git仓库管理工具,它的作用类似 git 的 submodule,用来将多个git仓库组成一个solution进行管理,比如ch ...

  6. CSS必学:元素之间的空白与行内块的幽灵空白问题

    作者:WangMin 格言:努力做好自己喜欢的每一件事 CSDN原创文章 博客地址 WangMin 我们在开发的过程中,难免会出现一些难以预料的问题.那么其中,CSS空白现象就是非常常见的问题之一.虽 ...

  7. python列表排序之sort(),sorted()和reverse()

    sort() 正序 sort()可以按字母的顺序来对列表进行永久性排序(改变列表自身的排序): list_1 = ['one', 'two', 'three', 'four', 'five'] pri ...

  8. 机器学习-ROC曲线:技术解析与实战应用

    本文全面探讨了ROC曲线(Receiver Operating Characteristic Curve)的重要性和应用,从其历史背景.数学基础到Python实现以及关键评价指标.文章旨在提供一个深刻 ...

  9. Http的演进

    Http的演进 Http在1.1版本之前具有无状态的特点,每次请求都需要通过TCP三次握手四次挥手与服务器重新建立连接.比如某个客户端在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户请求 ...

  10. nacos 安装和使用

    Nacos 是阿里巴巴开源项目,用于构建微服务应用的服务发现.配置管理和服务管理. 在微服务项目中不同模块之间服务调用时,实现服务注册与发现. Nacos 使用: Nacos 是java开发的,依赖 ...