Круговая диаграмма
Назначение
Этот компонент позволяет создавать круговые и кольцевые диаграммы. По умолчанию в нем уже включена всплывающая подсказка. Исходные данные передаются в виде массива в поле data, а отображаемые группы - в виде объекта в поле series. Размер сектора и цветовые параметры задаются в полях field и color соответственно у каждого значения внутри series. Для создания секторов диаграммы в виде кольца ("бублика") вам необходимо указать поля inner и outer, они задают внутренний и внешний радиус. Вы можете найти все доступные настройки в типе TPieConfig.
Использование
jsx
import { useState, useEffect } from 'react';
import { usePie } from 'effcharts/pie';
// определите пользовательский веб-компонент перед использованием
// обратите внимание, что для SSR функцию необходимо вызывать до того, как браузер проанализирует текст документа
// поэтому вам может потребоваться добавить отдельный скрипт в заголовок документа
const { observe, getConfig } = usePie();
export const App = () => {
const ref = useRef();
const [config, setConfig] = useState(getConfig({
data: [
{
name: 'Page A',
uv: 4000,
pv: 2400,
color: 'green'
},
{
name: 'Page B',
uv: 3000,
pv: 1398,
color: 'red'
},
{
name: 'Page C',
uv: 2000,
pv: 9800,
color: 'blue'
}
],
series: {
def: {
field: 'uv',
color: 'color',
title: 'Default',
inner: 0.55,
outer: 1
},
sec: {
field: 'pv',
color: 'color',
title: 'Secondary',
outer: 0.5,
angle: 180
}
}
}));
useEffect(() => {
// вы можете наблюдать за событиями веб-компонента
const unobserve = observe((e) => {
// обработчик события
}, ref.current);
// и вы можете отписаться от событий
return () => unobserve();
}, []);
// просто используйте веб-компонент в jsx
return <div ref={ref}>
<effcharts-pie config={config}>
</effcharts-pie>
</div>;
}Типизация
Вы можете объявить веб-компонент, используя интерфейс IPieChartAttrs. Вы также можете проверить конфигурацию диаграммы, используя тип TPieConfig:
tsx
import { HTMLAttributes } from 'react';
import { IPieChartAttrs, TPieConfig } from 'effcharts/pie';
type CustomElement<T> = Partial<T & HTMLAttributes<T> & { children: any }>;
// declare effcharts components
declare module 'react' {
namespace JSX {
interface IntrinsicElements {
'effcharts-pie': CustomElement<IPieChartAttrs>;
}
}
}
// prepare config
const config = {
data: [
{
name: 'Page A',
uv: 4000,
pv: 2400,
color: 'green'
},
{
name: 'Page B',
uv: 3000,
pv: 1398,
color: 'red'
},
{
name: 'Page C',
uv: 2000,
pv: 9800,
color: 'blue'
}
],
series: {
def: {
field: 'uv',
color: 'color',
title: 'Default',
inner: 0.55,
outer: 1
},
sec: {
field: 'pv',
color: 'color',
title: 'Secondary',
outer: 0.5,
angle: 180
}
}
} satisfies TPieConfig;