인피니트 스크롤링 (완성)
저번시간에 lastId방식을 완성시키지 않았었습니다.
lastId는 다음과 같이 구현해 줄 것입니다.
프론트에서 마지막 메인포스트의 아이디데이터를 백앤드서버로 보내준다.
백앤드 서버에서는 그보다 아이디가 작은 10개를 보내준다.
34개의 글이있다면 마지막에는 4개의 데이터만 올것이다.
만약 10개의 데이터가 왔다면 hasmorePosts를 true로 아니면 false로해서 더이상 로드를 막는다.
일단 useEffect안에서 lastId를 정해줄 것입니다.
useEffect(() => {
function onScroll() {
if (
window.pageYOffset + document.documentElement.clientHeight >
document.documentElement.scrollHeight - 300
) {
if (hasMorePost && !loadPostsLoading) {
const lastId = mainPosts[mainPosts.length - 1]?.id;
dispatch({ type: LOAD_POSTS_REQUEST, lastId });
}
}
}
window.addEventListener("scroll", onScroll);
return () => {
window.removeEventListener("scroll", onScroll);
//리턴해서 다시 삭제 안해주면 메모리에 쌓이게 된다.
};
}, [hasMorePost, loadPostsLoading, mainPosts]);리듀서함수에는 다음 내용으로 바꿔주고
saga에서 서버로 요청을 보낼때 다음과 같이 해줍니다.
처음에 요청을 보낼때는 data가 undifined이기 때문에 0을 넣어줬습니다.
이제 라우터로 넘어가게 되면
일단 LastId방식을 사용하기 위해서는 Op라는 Sequelize매소드가 필요합니다.
자 이것으로, 백앤드 서버가 완성되었습니다!!!!
다음부터는 next.js를 활용한 SSR (서버사이드 렌더링을 해보겠습니다)
Last updated
Was this helpful?