useQuery
를 사용해 내가 참여한 공동구매(채팅) 목록 데이터인 mySharings
쿼리 인스턴스 생성staleTime : 0 // 캐싱된 데이터는 언제나 stale 상태 cachTime : 60 * 5 * 1000 (5분) // inactive 상태가 된 후 5분 뒤 GC에 의해 처리 refetchOnMount, refetchOnWindowFocus, refetchOnReconnect : true // 각 시점에서 데이터가 stale 상태라면 항상 refetch retry : 3 // 쿼리 실패 시 3번까지 retry 발생 retryDelay : exponentiall backoff function
모집 상태(recruitment)
: 모집중 또는 모집 완료를 나타내는 데이터 마지막 메시지(lastMessage)
: 가장 마지막에 전송된 메시지안 읽은 메시지 개수(unreadCount)
: 해당 유저가 확인하지 않은 메시지의 개수
- 그 외 제목이나 제품 이미지, 위치 등도 개설자가 수정해 서버 데이터를 바꾸면 변경되는 Server State이다.
useQuery
를 이용해 구조분해할당으로 data 외에도 isLoading, isError, error 등을 받아와 편리하게 사용할 수 있다._app.tsx
파일에서 ReactQueryDevtools
를 불러와서 넣어준다._app.tsx
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; // 불러오기 ... return ( <> <Head> <title>Ngether</title> </Head> <QueryClientProvider client={queryClient}> ... {renderWithLayout(<Component {...pageProps} /> )} ... <ReactQueryDevtools initialIsOpen={false} /> // 넣어주기 </QueryClientProvider> </> );
마지막 메시지
와 안 읽은 메시지 개수
데이터의 업데이트가 수시로 일어나므로 default 값인 staleTime : 0
을 유지해 데이터를 받아오는 즉시 stale 상태가 되도록 했다. refetchInterval
option을 사용해 계속해서 업데이트된 데이터가 보여지는 방식도 고려해 보았으나...실제 채팅 서비스처럼 그럴 듯해 보인다는 점이 매력적이었지만...서버가 아파 보여서 관뒀다
refetchInterval
을 설정하지 않은 경우 새 채팅 메시지가 올라왔을 때 채팅 리스트 페이지에 다시 windowFocus 해주면(refetchOnWindowFocus : true
) 마지막 메시지가 업데이트된다. 레퍼런스