具有多个相同类型组件的React页。在单击按钮时显示更多相同的组件,防止在原始集中重新渲染
我有一个react摘要页面,它通过使用ReportProgressSummary组件来显示折线图。
在初始加载时,数据集被映射以显示这些组件中的多个。
单击展开按钮后,将在下面呈现这些组件的更多更大的集合。我的问题是,初始组件也会重新呈现。
该组件显示了一个动态的线形图渲染,因此重新渲染非常明显。有没有办法防止重新渲染初始组件?
我在想,我需要记录在ReportProgressSummary组件中达到的百分比值,并能够根据它的最终值进行测试,看看是否需要重新呈现……也许可以使用useRef(),但我不太确定如何...
例如,如果组件的百分比变量已经达到了传入的“result”值,则不需要再次呈现。
ReportProgressSummary组件:
const ReportProgressSummary = ({result, title}) => {
const [percent, setPercent] = useState(0);
let timer = React.useRef();
useEffect( () => {
let newPercent = percent + 1;
if (newPercent > result) {
clearTimeout(timer.current);
return;
}
timer.current = setTimeout(() => setPercent(newPercent), 1);
}, [percent]);
return (
<ContainerStyled>
<ChartContainerStyled>
<ChartTitleStyled>{title}</ChartTitleStyled>
<CheckboxStyled type="checkbox" />
</ChartContainerStyled>
<ChartContainerStyled>
<LineContainerStyled>
<Line trailWidth="2" trailColor="red" strokeWidth="4" strokeColor="green" percent={percent}/>
</LineContainerStyled>
<h6>{percent}%</h6>
</ChartContainerStyled>
</ContainerStyled>
)
};
export default ReportProgressSummary;
摘要组件:
const Summary = () => {
const [expand, setExpand] = useState(false);
const [buttonText, setButtonText] = useState("expand");
const onButtonClick = () => {
setExpand(!expand);
if(!expand) setButtonText("hide");
else setButtonText("expand");
};
return (
<div className="test">
<PageTitle title="System Overview"/>
<ContainerStyled>
{
selectedRules.map(rule => {
return <ReportProgressSummary result={rule.percentage} title={rule.name} key={shortid.generate()}/>
})
}
</ContainerStyled>
<ButtonStyled onClick={() => onButtonClick()}>{buttonText}</ButtonStyled>
{
expand &&
<ContainerStyled>
{
nonSelectedRules.map(rule => {
return <ReportProgressSummary result={rule.percentage} title={rule.name} key={shortid.generate()}/>
})
}
</ContainerStyled>
}
</div>
)
};
提前感谢
转载请注明出处:http://www.intsu.net/article/20230429/1786935.html