reactjs - 重新渲染reactjs时停止滚动条移动到顶部
问题描述
我正在尝试创建一个显示项目列表的面板,单击项目后,右侧应显示所选项目。左侧应包含项目列表。项目列表可能很长,因此,我限制了列表的最大高度,这样当它超过这个高度时,它将创建一个滚动条,以便用户可以向下滚动以查看列表的其余部分。问题是,每当单击列表底部的项目时,列表会自动滚动回顶部。我有一种感觉,这是因为我使用状态来传递项目,并且当项目被更改时,它会导致重新渲染,从而“重置”列表。有人可以给我一个关于如何阻止这种情况发生的建议吗?任何指针将不胜感激!
这是沙箱: https ://codesandbox.io/s/sad-archimedes-3u4k0?file=/src/App.js
ex/滚动到底部并单击“random30”,列表返回到“random1”
解决方案
发生这种情况是因为您在组件 EventListContainer
内部放置了一个组件,EventsList
这将导致每次更新状态时“重新渲染”。
您可以ScrollContainer
直接在EventsList
组件内移动return
:
return (
<ListContainer>
<ScrollContainer>
{eventListSorted.map(event => {
return (
<EventContainer
onClick={e => {
onSelect(event);
setSelectedEvent(event);
}}
selected={selectedEvent ? selectedEvent.id === event.id : false}
>
{event.uiString}
</EventContainer>
);
})}
</ScrollContainer>
</ListContainer>
);
此外,您最好将eventListSorted
数组移到EventsList
组件之外。
沙盒示例。
推荐阅读
- c++ - 错误:“double”和“double”类型的无效操作数到二进制“operator%”
- perl - 如何在 .pod 文件中嵌入图像以使其在 .odt 中呈现?
- complexity-theory - 确定互补范围
- keras - Jupyter 实验室中的 Keras 进度条只是堆积在输出单元格中
- html - 页面加载后页面标题切换到 URL?
- grafana - 在 grafana 中显示来自外部数据源的日志消息
- mysql - Mysql - 在子查询中使用 LIKE 运算符
- c# - 位置之间的统一角度
- python - 将多个“如果不是”放在一起
- android - 更新应用程序后出现异常:Context.startForegroundService() 未调用 Service.startForeground()