inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

React 기반 Gatsby로 기술 블로그 개발하기

EmotionJS 라이브러리를 통한 컴포넌트 스타일링 방법

IntersectionObserver deploy( gatsby build) 시 오류(자답)

387

hanumoka

작성한 질문수 13

1

useInfiniteScroll.tsx 파일

IntersectionObserver 구문에서 오류 발생

아래 처럼 코드 수정

import { MutableRefObject, useState, useEffect, useRef, useMemo } from 'react'
import { PostListItemType } from 'types/PostItem.types'

export type useInfiniteScrollType = {
  containerRef: MutableRefObject<HTMLDivElement | null>
  postList: PostListItemType[]
}

const NUMBER_OF_ITEMS_PER_PAGE = 10

const useInfiniteScroll = function (
  selectedCategory: string,
  posts: PostListItemType[],
): useInfiniteScrollType {
  const containerRef: MutableRefObject<HTMLDivElement | null> = useRef<HTMLDivElement>(
    null,
  )
  const [count, setCount] = useState<number>(1)

  const postListByCategory = useMemo<PostListItemType[]>(
    () =>
      posts.filter(({ node: { frontmatter: { categories } } }: PostListItemType) =>
        selectedCategory !== 'All'
          ? categories.includes(selectedCategory)
          : true,
      ),
    [selectedCategory],
  )

  const observer = useRef<IntersectionObserver | null>(null);

  useEffect(() => {
    observer.current = new IntersectionObserver(
      (entries, observer) => {
        if (!entries[0].isIntersecting) return;

        setCount(value => value + 1);
        observer.disconnect();
      },
    )
  }, []);

  useEffect(() => setCount(1), [selectedCategory])

  useEffect(() => {
    if (
      NUMBER_OF_ITEMS_PER_PAGE * count >= postListByCategory.length ||
      containerRef.current === null ||
      containerRef.current.children.length === 0
    ){
      return;
    }

    if(observer && observer.current){
      observer.current.observe(
        containerRef.current.children[containerRef.current.children.length - 1],
      )
    }

  }, [count, selectedCategory, observer])

  return {
    containerRef,
    postList: postListByCategory.slice(0, count * NUMBER_OF_ITEMS_PER_PAGE),
  }
}

export default useInfiniteScroll

 

Gatsby blog

답변 1

1

yunseong3736

Gatsby cloud에 배포할 때도 이 부분이 필요합니다. 감사합니다.

쿼리오류 Field "thumbnail" must not have a selection...

1

852

1

타입스크립트를 설정할 때 jsxPragma 옵션을 뺀 이유는 무엇인가요?

1

585

1

마지막 배포 부분 질문드립니다!

1

617

1

'[username]/[username].github.io' -> 'username/reponame'

0

337

0

PostHead.tsx BackgroundImage 동작오류(자답)

1

288

0

19강 인피니티 스크롤 IntersectionObserver 코드 위치 수정이 필요합니다.

1

402

1

썸네일 이미지 제작 및 학습 방법 관련 문의

1

436

1

배포 후 포스트 업로드 방법

1

378

1

배포 질문이요!

1

512

1

gatsby develop 오류

1

931

1

깃허브 레퍼지토리 질문드려요

1

339

1

특정 게시글을 클릭하여 상세 페이지로 넘어가는 과정과 SPA에 관한 질문

1

280

1

Unhandled Runtime Error 가 뜹니다

0

501

2

sign in with GitHub 클릭 시

1

390

3

동작 반복 시 오류

1

349

2

const BackgroundImage 질문

1

209

1

오타 문의

1

299

2

Props로 받아 포스트 데이터 출력하기가 안됩니다.

1

199

1

index.tsx allMarkdownRemark 에러..

0

591

2

스네이크 케이스로 변수명을 짓는 이유

1

248

1

'Tagged Template Literal 방식을 통해 정의한 CSS 적용 방법'에서 발생하는 문제

3

343

2

상단 이미지를 썸네일 사용하지않고 다른 이미지를 쓰고싶습니다

1

279

1

여기까지 했는데 runtime 에러가 발생합니다

2

277

1

index.tsx오류

2

451

1