项目场景:
react 后台管理系统中首页用到Ant Design Charts
图表,实现了多个图表
问题描述
当 useState
更新时或者通过筛选框
更新图表时,当前页面中所有的图表都进行重复的刷新
原因分析:
由于 useState
数据更新,数据变化随之驱动页面更新,从而刷新
解决方案:
通过hook
useMemo
对图表进行封装,等待指定参数更新时,页面在进行渲染
- 通过外部传入数据
- 通过
useMemo
对外部传入数据进行监听 - 当监听的数据变化时,
useMemo
在对页面进行渲染
import React, { useMemo } from 'react';
import { Pie } from '@ant-design/plots';
export default ({ data, toFixedNum = 0, }) => {
const config = {
appendPadding: 10,
angleField: 'value',
colorField: 'type',
radius: 0.9,
label: {
type: 'inner',
offset: '-30%',
content: ({ percent }) => `${(percent * 100).toFixed(toFixedNum)}%`,
style: {
fontSize: 14,
textAlign: 'center',
},
},
tooltip: {
formatter: (datum) => {
return { name: datum.type, value: datum.value + "人" };
},
},
interactions: [
{
type: 'element-active',
},
],
};
const component = useMemo(() => {
return (
<Pie data={data} {...config} />
);
}, [data]);
return component;
};