더북(TheBook)

이를 처리하는 방법은 앞에서와 같이 배열의 내장 함수 concat을 사용하는 것입니다. 그런데 만약 [].concat(...data.pages)라고 하면 앞부분에 []never[] 배열로 추론되어 타입 오류가 발생합니다. 따라서 [] as Article[]이라고 입력하여 해당 배열이 Article의 배열이란 것을 명시하고, concat을 해줬습니다. concat에는 배열 타입을 넣으면 해당 배열을 해체해서 앞부분의 배열에 붙여주기 때문에, 앞에서와 같이 하면 배열들이 하나의 배열로 합쳐집니다.

다음은 concat으로 배열들을 합치는 예시 코드입니다.

const firstArray = [0, 1, 2];
const secondArray = [3, 4, 5];
const thirdArray = [6, 7, 8];

const merged = ([] as number[]).concat(firstArray, secondArray, thirdArray);
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

items 배열을 만드는 코드는 현재 useMemo로 한 번 감싸줬는데요. 이는 최적화하기 위함입니다. 만약 useMemo로 감싸지 않으면 로딩 data가 변경되지 않았을 때도 다른 상태가 변할 때 불필요한 연산이 이뤄집니다.

useInfiniteQuery에서 반환되는 객체에는 data 외에 다음 필드들이 있습니다.

fetchNextPage: 다음 페이지를 불러오는 함수입니다.

hasNextPage: 다음 페이지의 존재 유무를 알려줍니다. 만약 getNextPageParam에서 undefined를 반환했다면 이 값은 false가 되고 그렇지 않으면 true가 됩니다.

isFetchingNextPage: 다음 페이지를 불러오고 있는지 여부를 알려줍니다.

그 외에 useQuery에서 반환되는 모든 필드들이 존재합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.