Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- array
- generic
- map
- async
- 슬라이딩윈도우
- 배열중복요소제거
- Spring
- app.post
- extends
- mainapplication.kt
- materialicons
- 상속
- javascript
- 페이지네이션
- meatadata
- 스크롤이벤트
- supabase 페이지네이션
- 이진탐색
- app:compiledebugkotlin
- 타입스크립트
- reactnative
- TS
- react
- 리액트네이티브아이콘
- 안드로이드빌드에러
- Next.js
- set
- interface
- Filter
- 글또10기
Archives
- Today
- Total
rhanziy
React Native - useInfiniteQuery 파라미터 여러개 넘기기 본문
why ?
가게 전체 상품에 대한 리뷰를 가져올때 reviews/{ storeId } 로 데이터를 요청하잖아요?? 근데 useInfiniteQuery 공식문서에는 암만 찾아봐도 fetchApi 함수에 파라미터 여러개 넘기는 방법이 없어서 찾아봄.
🔽 이게 공식문서
const {
fetchNextPage,
fetchPreviousPage,
hasNextPage,
hasPreviousPage,
isFetchingNextPage,
isFetchingPreviousPage,
...result
} = useInfiniteQuery({
queryKey,
queryFn: ({ pageParam = 1 }) => fetchPage(pageParam),
...options,
getNextPageParam: (lastPage, allPages) => lastPage.nextCursor,
getPreviousPageParam: (firstPage, allPages) => firstPage.prevCursor,
})
🚨 일단 storeId 값에 맞는 리뷰만 불러오는 커스텀 훅 useReviews 작성
const useReviews = (filters: GetReviewsParams) => {
const {data, hasNextPage, fetchNextPage, isFetched} = useInfiniteQuery(
[queryKeys.reviews, filters],
({pageParam = 1}) => getReviews(pageParam, filters),
{
getNextPageParam: lastPage => lastPage.nextPage,
keepPreviousData: true,
refetchOnMount: false,
},
);
const loadMore = useCallback(() => {
if (hasNextPage) {
fetchNextPage();
}
}, [hasNextPage, fetchNextPage]);
return {data, loadMore, isFetched};
};
- useReviews 파라미터로 필터링할 정보(storeId, productId)를 받아옴.
- filter를 쿼리키 배열의 두번째에 작성. 커스텀 훅 내에서 전역변수 받아다가 추가하려면 ['쿼리키', {...filters, param}] 으로 추가~
- 그리고 ({pageParam = 1}) => fetchApi( pageParam, filters ) 로 넘겨준다.
- useQuery는 쿼리키에 의존하여 데이터를 변화시키기때문에 ['쿼리키', 변수] 이렇게 입력하면 해당 쿼리키와 변수에 상태변화가 있을때마다 두번째 fetch함수를 실행한다!
🚨 대망의 getReviews!
구글링 열심히했는데 계속 데이터 get해오는 함수는 안보여주더라ㅡㅡ 답답
const getReviews = async (pageNo: number, filters: GetReviewsParams) => {
const {
data: {data},
} = await httpClient.get<Page<IReview>>('/reviews', {
params: {
filters,
pageNo,
pageSize: 8,
},
});
const nextPage = data.totalPage > pageNo ? pageNo + 1 : undefined;
return {...data, nextPage};
};
이렇게 작성하면 됨. 이제 useInfiniteQuery 가 퉤! 하고 뱉어주는 data를 FlatList에 잘 꽂아보쟈🥹 야호.
참고사항
코드는 오류없는데 data가 자꾸 undefined로 뜨는것임 ㅠ
알고봤더니 params를 저렇게 넘기니 api에서도 파라미터를 추가해줘야댐!!! 당연히 기본이지 응응.. 미처 간과했다.
'React Native' 카테고리의 다른 글
React Native - 아래로 끌어내려서 새로고침 RefreshControl (1) | 2023.11.23 |
---|---|
React Native - 인풋이 키보드에 가려져요? KeyboardAvoidingView, KeyboardAwareFlatList (2) | 2023.11.23 |
React Native - 무한스크롤 useInfiniteQuery와 FlatList (typescript) (0) | 2023.11.20 |
React Native - 에러해결 invalid hook call error(feat.카카오로그인) (1) | 2023.11.03 |
React Native - edit기능 구현 중 too many re-renders(에러) (2) | 2023.10.10 |
Comments