일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- async/await
- CORS
- map
- recoil
- autosize
- 공변성
- webpack
- dfs
- Promise
- 이분 검색
- ESlint
- 투포인터
- 반공변성
- 결정 알고리즘
- TS
- 태그된 유니온
- Cypress
- Jest
- SSR
- 리터럴 타입
- useAppDispatch
- RTK Query
- 호이스팅
- React
- app router
- 무한 스크롤
- 인터섹션
- 타입 좁히기
- tailwind
- CI/CD
Archives
- Today
- Total
짧은코딩
쿼리 key의 중요성(다른 요청 시 값이 안바뀌는 문제) 본문
반응형
리액트 쿼리에서는 key를 다르게 설정해야 다른 값으로 인지한다.
위 사진은 Blog Posts의 글을 클릭하면 각각 다른 comments를 보여주는 사이트이다.
잘못된 코드
const { data, isLoading, isError, error } = useQuery("comments", () =>
fetchComments(post.id)
);
이 코드에서는 트리거가 발생했을 때만 data를 업데이트한다. 그렇기에 다른 블로그 제목을 클릭해도 같은 댓글이 나오게 된다.
해결 방법
const { data, isLoading, isError, error } = useQuery(
["comments", post.id],
() => fetchComments(post.id)
);
이 경우 key를 ["comment", post.id]로 하면 쿼리 키를 쿼리에 대한 의존성 배열로 취급한다. 따라서 post.id가 변경되면 리액트 쿼리에서 새 쿼리를 생성하여 staleTime과 cacheTime을 가지게 된다. 이렇게 하면 모든 comments 쿼리가 같은 쿼리로 취급하지 않아 댓글 업데이트가 잘 될 것이다.
0으로 표시된 것은 이전에 로드되었던 댓글이다. 다른 게시물을 클릭하면 이전 댓글의 데이터는 비활성화된다. 그 이후 cacheTime 동안은 남아있다가 가비지로 수집된다.
반응형
'인프런, 유데미 > React-Query' 카테고리의 다른 글
무한 스크롤 (0) | 2023.03.31 |
---|---|
Mutation (0) | 2023.03.30 |
isFetching vs isLoading (0) | 2023.03.29 |
Prefetching을 해야하는 이유 (0) | 2023.03.29 |
리액트 쿼리, staleTime (0) | 2023.03.28 |
Comments