React19通用ECharts组件的使用示例

 更新时间:2026年02月04日 09:01:14   作者:zwjapple  
本文主要介绍了React19通用ECharts组件的使用示例,支持饼图、折线图和柱状图,并且可以自动销毁实例以避免重复渲染问题,同时能够自动响应窗口大小变化,下面就来详细的介绍一下

好,我给你做一个 React 19 通用 ECharts 组件
支持饼图 / 折线图 / 柱状图,colors 可选,不传也能显示,防止重复渲染。

1.src/services/echarts.ts

注册所有需要的图表类型和组件(不用再分开写折线/饼图/柱状图)

// src/services/echarts.ts
import * as echarts from 'echarts/core';
import {
  TitleComponent,
  TooltipComponent,
  GridComponent,
  LegendComponent,
  ToolboxComponent
} from 'echarts/components';
import { LineChart, PieChart, BarChart } from 'echarts/charts';
import { CanvasRenderer } from 'echarts/renderers';

// 按需注册组件
echarts.use([
  TitleComponent,
  TooltipComponent,
  GridComponent,
  LegendComponent,
  ToolboxComponent,
  LineChart,
  PieChart,
  BarChart,
  CanvasRenderer
]);

export default echarts;

2.src/components/EChartsBase.tsx

一个通用的 React 19 ECharts 组件

// src/components/EChartsBase.tsx
import React, { useRef, useEffect } from 'react';
import echarts from '@/services/echarts';

interface EChartsBaseProps {
  option: echarts.EChartsOption;
  width?: string;
  height?: string;
}

const EChartsBase: React.FC<EChartsBaseProps> = ({
  option,
  width = '100%',
  height = '400px'
}) => {
  const chartRef = useRef<HTMLDivElement | null>(null);
  const chartInstance = useRef<echarts.EChartsType | null>(null);

  useEffect(() => {
    if (chartRef.current) {
      // 如果已有实例,先销毁,防止 React 19 重复渲染
      if (chartInstance.current) {
        chartInstance.current.dispose();
      }
      chartInstance.current = echarts.init(chartRef.current);
      chartInstance.current.setOption(option);
    }

    // 监听窗口大小变化
    const handleResize = () => {
      chartInstance.current?.resize();
    };
    window.addEventListener('resize', handleResize);

    return () => {
      chartInstance.current?.dispose();
      window.removeEventListener('resize', handleResize);
    };
  }, [option]);

  return <div ref={chartRef} style={{ width, height }} />;
};

export default EChartsBase;

3. 使用示例(不传colors也能显示)

// src/pages/DemoCharts.tsx
import React from 'react';
import EChartsBase from '@/components/EChartsBase';

export default function DemoCharts() {
  const pieOption = {
    title: { text: '示例饼图', left: 'center' },
    tooltip: { trigger: 'item' },
    legend: { bottom: 0 },
    series: [
      {
        name: '访问来源',
        type: 'pie',
        radius: '50%',
        data: [
          { value: 1048, name: '搜索引擎' },
          { value: 735, name: '直接访问' },
          { value: 580, name: '邮件营销' }
        ]
      }
    ]
  };

  const lineOption = {
    title: { text: '示例折线图' },
    tooltip: { trigger: 'axis' },
    xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] },
    yAxis: { type: 'value' },
    series: [
      { data: [150, 230, 224, 218, 135, 147, 260], type: 'line', smooth: true }
    ]
  };

  const barOption = {
    title: { text: '示例柱状图' },
    tooltip: {},
    xAxis: { type: 'category', data: ['苹果', '香蕉', '橘子', '梨子'] },
    yAxis: { type: 'value' },
    series: [
      { data: [5, 20, 36, 10], type: 'bar' }
    ]
  };

  return (
    <div style={{ padding: 20 }}>
      <EChartsBase option={pieOption} height="300px" />
      <EChartsBase option={lineOption} height="300px" />
      <EChartsBase option={barOption} height="300px" />
    </div>
  );
}

✅ 特点:

  • React 19 兼容
  • 饼图 / 折线图 / 柱状图通用
  • colors 可选,不传也正常显示
  • 自动销毁实例,避免 React 19 重复渲染导致的图表不显示
  • 自动响应窗口大小变化

到此这篇关于React19通用ECharts组件的使用示例的文章就介绍到这了,更多相关React通用ECharts内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • react native reanimated实现动画示例详解

    react native reanimated实现动画示例详解

    这篇文章主要为大家介绍了react native reanimated实现动画示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • React 数据共享useContext的实现

    React 数据共享useContext的实现

    本文主要介绍了React 数据共享useContext的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • React 脚手架配置代理完整指南(最新推荐)

    React 脚手架配置代理完整指南(最新推荐)

    本文详细介绍了React脚手架配置代理的多种方式,文章还讨论了常见问题的解决方案,如跨域问题、WebSocket代理和错误处理,并提供了生产环境配置建议和调试技巧,感兴趣的朋友一起看看吧
    2024-12-12
  • React冒泡和阻止冒泡的应用详解

    React冒泡和阻止冒泡的应用详解

    这篇文章主要介绍了React冒泡和阻止冒泡的应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • TypeScript在React项目中的实战应用指南及技巧

    TypeScript在React项目中的实战应用指南及技巧

    在React项目中集成TypeScript可以显著提升开发体验,通过类型检查减少运行时错误,提高代码可维护性,这篇文章主要介绍了TypeScript在React项目中实战应用指南及技巧的相关资料,需要的朋友可以参考下
    2026-03-03
  • React封装CustomSelect组件思路详解

    React封装CustomSelect组件思路详解

    小编需要封装一个通过Popover弹出框里可以自定义渲染内容的组件,渲染内容暂时有: 单选框, 复选框,接下来通过本文给大家分享React封装CustomSelect组件思路,需要的朋友可以参考下
    2022-07-07
  • React Hook中的useEffecfa函数的使用小结

    React Hook中的useEffecfa函数的使用小结

    React 会在组件更新和卸载的时候执行清除操作, 将上一次的监听取消掉, 只留下当前的监听,这篇文章主要介绍了React Hook useEffecfa函数的使用细节详解,需要的朋友可以参考下
    2022-11-11
  • react源码层分析协调与调度

    react源码层分析协调与调度

    本文主要介绍了深入理解React协调与调度(Scheduler)原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • 一文带你了解React中的函数组件

    一文带你了解React中的函数组件

    函数式组件的基本意义就是,组件实际上是一个函数,不是类,下面这篇文章主要给大家介绍了关于React中函数组件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • React组件的应用介绍

    React组件的应用介绍

    React组件分为函数组件与class组件;函数组件是无状态组件,class称为类组件;函数组件只有props,没有自己的私有数据和生命周期函数;class组件有自己私有数据(this.state) 和 生命周期函数
    2022-09-09

最新评论