querykey의 배열을 활용하여 특정 데이터만 받아오기
export async function getPostsByUsername(username) {
const response = await fetch(`${BASE_URL}/posts?username=${username}`);
return await response.json();
}
function HomePage() {
const username = '임의지정';
const { data: postsDataByUsername } = useQuery({
queryKey: ['posts', username],
queryFn: () => getPostsByUsername(username),
});
console.log(postsDataByUsername);
return <div>홈페이지</div>;
}
queryKey의 배열에 지정한 이름을 넣어준다.
username에 대한 쿼리만 캐싱이 된다.
const { data: postsDataByUsername } = useQuery({
queryKey: ['posts', username, { status: private }],
queryFn: () => getPrivatePostsByUsername(username)
});
위 코드는 private 상태의 포스트만 받아올 수 있다.
queryFn에서 화살표 함수 형태로 아규먼트에 username을 전달해 줄 수 있다.
const { data: postsDataByUsername } = useQuery({
queryKey: ['posts', username],
queryFn: ({ queryKey }) => getPostsByUserId(queryKey[1]),
});
const username = 'codeit';
const { data: postsDataByUsername } = useQuery({
queryKey: ['posts', { username }],
queryFn: ({ queryKey }) => {
const [key, { username }] = queryKey;
return getPostsByUserId(username);
}
});
체를 쿼리 키로 전달하면 그 안에서는 순서에 상관없이 같은 값들을 가지고 있는 객체라면 같은 쿼리 키로 인식하지만, 배열을 쿼리 키로 전달하면 요소의 순서가 중요하다. 순서가 달라지면 다른 쿼리 키로 인식하기 때문에 배열의 요소로 쿼리 키를 지정할 경우 순서에 꼭 유의
// 다음 세 가지는 모두 같은 쿼리로 인식한다
useQuery({ queryKey: ['posts', { username, userEmail }], ... });
useQuery({ queryKey: ['posts', { userEmail, username }], ... });
useQuery({ queryKey: ['posts', { userEmail, username, other: undefined }], ... });
// 다음 세 가지는 모두 다른 쿼리로 인식한다
useQuery({ queryKey: ['posts', username, userEmail], ... });
useQuery({ queryKey: ['posts', userEmail, username], ... });
useQuery({ queryKey: ['posts', undefined, userEmail, username], ... });