• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

스크롤탑 동기처리 이슈.

22.12.04 23:49 작성 조회수 311

0

안녕하세요 제로초님.

인피니티 스크롤 로딩 후 추가 데이터를 로딩하고 스크롤 위치를 유지하는 로직에 문제가 있어서 문의드립니다.

아래 코드에서는 setSize의 then문 안에 setTimeout으로 한 번 더 감싸주었는데
setTimeout이 없는경우 데이터가 불러와지기전에(스크롤의 높이가 늘어나지 않은 상태에서) setTimeout내부의 로직이 실행됩니다.

그로인해 스크롤의 높이는 기존높이 - 기존높이 로 scrollTop(0) 과 같은 상태가 되어버리는데요.
setTimeout으로 0초의 딜레이를 주면 또 순서대로 동작을 합니다...
이런경우에 좋은 해결책이 있을까요?

    const onScroll = useCallback((values: positionValues) => {
        if (values.scrollTop === 0 && !isReachingEnd) {
            setSize((prevSize) => prevSize + 1).then(() => {
                setTimeout(() => {
                    if (typeof scrollbarRef !== "function" && scrollbarRef?.current) {
                        scrollbarRef.current.scrollTop(scrollbarRef.current.getScrollHeight() - values.scrollHeight);
                    }
                }, 0);
            });
        }
    }, []);

답변 1

답변을 작성해보세요.

1

타이밍 맞추기(+코드 깔끔하게 만들기)는 좀 많은 연구가 필요하긴 한데요. 일단 셋타임아웃 넣어서 해결되는 거면 그대로 하셔도 되긴 합니다.

김영욱님의 프로필

김영욱

질문자

2022.12.05

넵 감사합니다~!