在react项目里使用 Ant Design Charts 的统计图组件时,在同一个页面,每次在其他隔离组件里修改useState里不属于统计图组件的数据时,都会导致统计图组件重新渲染,这时候可以使用useMemo来解决这个多次渲染的问题,缓存统计图的渲染,仅当 data
值发生改变才会重新渲染 。
import { Line } from '@ant-design/charts';
function Index(props) {
const [dates, setDates] = useState([]);
const [dayCountList, setDayCountList] = useState([]);
const config1 ={
// data: dayCountList,
smooth: true,
xField: 'date',
yField: 'total',
xAxis: {
title: {
text: '日期',
position: 'end',
autoRotate: true
},
// type: 'time',
label: {
// 数值格式化为千分位
formatter: (v) => moment(v).format('YYYY-MM-DD')
},
},
yAxis: {
title: {
text: '打开次数',
position: 'end',
autoRotate: true
},
}
};
const changeData = (num) => {
setDates([num])
})
return <div>
<Button type="primary" onClick={() => changeData(1)}>近7天</Button>
{
useMemo(() => <Line {...config} data={dayCountList}/>, [dayCountList])
}
</div>
}
原来不加useMemo的话,每次点击一次 按钮触发changeDate都会导致Line组件重新渲染,现在加上useMemo之后,只有dayCountList变化的时候,才会重新渲染Line组件。