【发布时间】:2020-12-04 05:16:11
【问题描述】:
我试图实现无限滚动,但是当组件重新渲染时,滚动条会一直回到顶部,如下所示。如何将滚动条粘贴到用户滚动的位置?还是因为组件重新渲染?但是组件必须重新渲染,因为新记录是从 api 调用中添加的。
AppList.tsx
//Initial values
const [pageNumber, setPageNumber] = useState<number>(1);
const [scrolling, setScrolling] = useState<boolean>(false);
const [totalPages, setTotalPages] = useState<number>(3);
<div ref={divRef} className={AppList.Container} onScroll={() => {
if (scrolling && totalPages! <= pageNumber!) {
return;
}
else {
const nodes = document.querySelectorAll('.ms-List-cell');
const lastLi: Element = nodes[nodes.length - 1];
const lastLiOffset = lastLi.getBoundingClientRect().top + lastLi.clientHeight;
const pageOffset = window.pageYOffset + window.innerHeight;
var bottomOffset = 150;
if (pageOffset > lastLiOffset - bottomOffset) {
setScrolling!(true);
setPageNumber!(pageNumber! + 1);
dispatch(GetAllAppDefinitions(dispatch, pageNumber! + 1));(Service call)
}
}
}}>
{updatedColumns.length > 0 && (
<DetailsList
className={appListTableStyle}
columns={updatedColumns}
selectionMode={SelectionMode.none}
items={updatedItems || []}
/>
)}
</div>
【问题讨论】:
标签: reactjs scroll infinite-scroll rerender