寻找一些 React 渲染/useMemo 指导。
我有一个包含 2,000 多个项目的列表,每个项目都是一个 React 组件。有一个“当前选定”项目的突出显示,该项目独立于列表呈现。这允许我只渲染一次列表。
useMemo(_ => {
<Item .../>
<Item .../>
...
<Item .../>
}, [contents])
现在我添加了“扩展”其中的列表项的功能,它只添加新的 DOM 元素,而不修改处于非扩展状态的列表项。
你可以想象每个Item
都是两个部分:
function Item(props) {
return
<div>
<SubItem />
{
if (props.open) {
<OtherItem />
} else {
null
}
}
</div>
}
useMemo(_ => {
<Item open={1 == current} .../>
<Item open={2 == current} .../>
...
<Item open={n == current} .../>
}, [contents, current])
问题:有没有一种方法可以支持这一点,而不必在每次展开/折叠新项目时重新渲染整个列表?
不幸的是,扩展的 DOM 元素是“流动的”,因此扩展会在其后推送列表项(不仅仅是悬停/覆盖)。