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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
使用useImperativeHandle时父组件第一次没拿到子组件的问题
这篇文章主要介绍了使用useImperativeHandle时父组件第一次没拿到子组件的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-08-08
React 组件中的state和setState()你知道多少
这篇文章主要为大家详细介绍了React组件中的state和setState(),文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助2022-03-03


最新评论