[Netflix] Infinite Scroll 기능 구현, Recommend Data 출력

2021. 9. 17. 13:13·Project/Netflix [React + Hooks]
반응형

결과

Infinite Scroll 기능을 구현하였다.

Api 데이터에서 해당 [ Tv / 영화 ]와 관련된 추천 영상을 불러와서 출력해주었다.

 

Infinite Scroll 기능
추천 영상

 


Infinite Scroll

Tv / 영화 두 곳에서 필요로 하기 때문에 기능이 중복된다.

따라서 Custom Hook으로 따로 분리해주었다.

page값이 url 마지막에 붙어(...&language=en-US&page=1) 있어서 params : { page : page }로 전달해주었다.

lodash uniqBy()로 id 값을 비교해서 중복을 방지해주었다.

 

[ useInfiniteScroll.js ]

import { useEffect, useState } from 'react';

const useInfiniteScroll = () => {
  const [page, setPage] = useState(1);

  const handleScroll = () => {
    const scrollHeight = document.documentElement.scrollHeight;
    const scrollTop = document.documentElement.scrollTop;
    const innerHeight = window.innerHeight;

    if (scrollHeight <= scrollTop + innerHeight) {
      setPage(page => page + 1);
    }
    return;
  };

  useEffect(() => {
    window.addEventListener('scroll', handleScroll);
    return () => {
      window.removeEventListener('scroll', handleScroll);
    };
  }, []);
  return page;
};

export default useInfiniteScroll;

 

Infinite Scroll - 오류

innerHeight 값이 필요하였는데, clientHeight 으로 계산을 실수하여 스크롤중 여러 페이지를 불러오는 상황이 발생하였다. 

 

출처 : https://javascript.info/size-and-scroll

 


계획

추천 프로그램에 슬라이더(Slider) 효과를 적용할 예정이다.

각 페이지 [ 홈 / Tv / 영화 ] 배치와 CSS를 수정할 예정이다.

 


코드

https://github.com/ssc9811/scflix-hook

 

GitHub - ssc9811/scflix-hook: TMDB API를 활용하여 Netflix를 클론한 나만의 Scflix

TMDB API를 활용하여 Netflix를 클론한 나만의 Scflix. Contribute to ssc9811/scflix-hook development by creating an account on GitHub.

github.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'Project/Netflix [React + Hooks]' 카테고리의 다른 글
  • [Netflix] Search 페이지 수정, iframe 유튜브 영상 전체 화면
  • [Netflix] 추천 영상, 예고편 슬라이드 적용 및 디자인 변경
  • [Netflix] Detail page 헤더 부분, 출연진 출력
  • [Netflix] [ TV 프로그램 / 영화 ] 출력 형태 변경, Search 기능 구현
꾸매코더
꾸매코더
웹 / 앱 개발자
  • 꾸매코더
    꾸매코딩
    꾸매코더
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • JavaScript (18)
        • Deep Dive (0)
      • React (5)
      • React-Native (9)
      • CSS (3)
      • TypeScript (1)
      • CS (10)
      • GitHub (4)
      • Clone Coding (15)
        • Kakaotalk [HTML + CSS] (10)
        • Momentum [JavaScript] (5)
      • Project (30)
        • Timer Project (14)
        • Netflix [React + Hooks] (12)
        • ToDoList [React-Native] (4)
      • 회고 (1)
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
꾸매코더
[Netflix] Infinite Scroll 기능 구현, Recommend Data 출력
상단으로

티스토리툴바