개발모드면 리액트 자체에서 디버깅을 용이하게 하기 위해서 일부로 리렌더링 합니다! build하고 serve로 봐보세요
react-intersection-observer, react-use를 이용해 구현하였다.
react-intersection-observer
react-use
const [ref, inView] = useInView();
const getMovieList = useCallback(() => {
//로딩 및 axios
}, [/*dependencies*/]);
// 마운트 시 get
useMount(() => {
getMovieList();
});
// inView true인 경우 pageNum + 1
useEffect(() => {
if (inView) {
setPageNumber((prev) => prev + 1);
}
}, [inView, setPageNumber]);
// getMovieList 반복
useUpdateEffect(() => {
getMovieList();
}, [getMovieList]);
공식 문서를 참고해보세요
isLoading state를 이용해 spinner
{isLoading && <Spinner />}
리스트 마지막에 div로 inView의 값을 설정
<ul>
//...
</ul>
<div ref={ref} />
favoriteMovieList를 Recoil을 사용해 전역으로 상태 관리
localStorage 해야지...