【发布时间】:2021-05-29 12:06:25
【问题描述】:
我为 PieChart 创建自定义标签
CustomLabel.js
const renderCustomizedLabel = (props,centerText) => {
console.log("rendered")
return (
<g>...</g>
);
};
export default renderCustomizedLabel;
CustomPieChart.js
export default class Example extends PureComponent {
constructor(props){
super(props);
}
render() {
return (
<ResponsiveContainer width="100%" aspect={2}>
<PieChart width={600} height={600}>
<Pie
data={this.props.data}
dataKey="value"
nameKey="name"
cx="50%" cy="50%" innerRadius={80} outerRadius={90}
label={(a)=>CustomPieChartLabel(a,this.props.centerText)}>
{this.props.data.map((entry, index) => (<Cell key={`cell-${index}`} fill={entry.color} />))}
</Pie>
</PieChart>
</ResponsiveContainer>
);
}
}
问题
每次将鼠标悬停在单元格上时,renderCustomizedLabel 都会为每个数据工作和渲染。
在上面的代码中,我没有使用任何 onMouseMove、onMouseOver、onMouseEnter 方法。
如上图,当鼠标悬停在红色、蓝色或灰色区域时,console.log("rendered") 工作 3 次。
为了解决这个问题,我尝试使用 React.memo
CustomLabelWithMemo.js
const MemoComponent = React.memo(function renderCustomizedLabel(props) {
console.log("rendered")
return (
<g>...</g>
);
});
export default MemoComponent
但它给了我一个错误
TypeError: Object(...) 不是函数
我该如何解决这个问题?
复制链接 CodeSandBox
【问题讨论】: