inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Phát triển blog công nghệ với Gatsby dựa trên React

Cách tạo kiểu cho các thành phần bằng thư viện EmotionJS

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

387

hanumoka

13 câu hỏi đã được viết

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

Câu trả lời 1

1

yunseong3736

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

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

1

853

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

932

1

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

1

340

1

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

1

280

1

Unhandled Runtime Error 가 뜹니다

0

502

2

sign in with GitHub 클릭 시

1

393

3

동작 반복 시 오류

1

350

2

const BackgroundImage 질문

1

209

1

오타 문의

1

300

2

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

1

200

1

index.tsx allMarkdownRemark 에러..

0

592

2

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

1

248

1

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

3

344

2

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

1

280

1

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

2

278

1

index.tsx오류

2

452

1