【发布时间】:2022-11-07 22:31:59
【问题描述】:
我正在努力阻止我的整个列表重新渲染。当我选择一个项目时,它应该加下划线。如果重新渲染新选择的元素和先前选择的元素就足够了。
在最坏的情况下,这个 List 可以包含数百个条目,而且速度非常慢。所以我尝试使用 React.memo 方法,但我可能用错了。
这是我的 List 和 ListEntry 的自定义函数(更改选定和当前选择是父级的 state 和 setState 函数)
function CustomList(props: any) {
return (
<List
component="div"
>
{props.data.map((entryData: any, index: number) => {
return (
<React.Fragment key={index}>
<CustomListEntry
entryData={entryData}
changeSelected={props.changeSelected}
style={{
borderBottom:
props.currentlySelected == entryData.id ? "dashed" : "",
}}
/>
</React.Fragment>
);
})}
</List>
);
}
const CustomListEntry = React.memo((props: any) => {
return (
<ListItemButton
style={props.style}
onClick={() => {
props.changeSelected(props.entryData.id);
}}
>
<ListItemText>
{props.entryData.exampledata}
</ListItemText>
</ListItemButton>
);
});
和父组件:
function Root(props:any){
const [selectedId, setSelectedId] = React.useState("");
...
return{
<CustomList
data={data}
changeSelected={setSelectedId}
currentlySelected={selectedId}
></CustomList>
}
}
【问题讨论】:
-
这也取决于您的更新功能
changeSelected,您也可以分享那部分吗?我们可以帮助您检查 -
我添加了父组件,但它实际上只是正常反应状态的传递
标签: reactjs