invalidateQueries
invalidateQueries 개념정리
invalidateQueries란?
리액트 쿼리에서 invalidateQueries는 캐시된 데이터를 무효화하고
새로운 데이터를 다시 가져오도록 요청하는 메서드이다.
사용해야 되는 상황
데이터 변경 후 새로고침
예를 들어, 사용자가 데이터를 수정하고 나서 데이터를 새로고침해야 할 때 사용된다.
이 경우 기존 쿼리 캐시를 무효화하고, 변경된 데이터를 다시 가져와서 UI를 업데이트한다.
실시간 데이터 업데이트
다른 사용자가 데이터를 변경할 경우, 새로운 데이터가 서버에 반영되어
UI가 실시간으로 업데이트되어야 할 때 사용될 수 있다.
이 때 invalidateQueries를 사용하여 변경 사항을 즉시 반영할 수 있다.
예시코드
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
32
33
34
35
36
37
import React from 'react';
import { useQuery, useQueryClient } from 'react-query';
const fetchPosts = async () => {
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
if (!response.ok) {
throw new Error('네트워크 오류 - 데이터를 가져올 수 없습니다.');
}
return response.json();
};
const Posts = () => {
const queryClient = useQueryClient();
const { data, isLoading, isError } = useQuery('posts', fetchPosts);
const handleRefresh = async () => {
await queryClient.invalidateQueries('posts');
};
if (isLoading) return <p>Loading...</p>;
if (isError) return <p>Error fetching data...</p>;
return (
<div>
<h2>Posts</h2>
<button onClick={handleRefresh}>Refresh</button>
<ul>
{data.map(post => (
<li key={post.id}>{post.title}</li>
))}
</ul>
</div>
);
};
export default Posts;
위의 예시코드에서 handleRefresh
함수는 queryClient.invalidateQueries('posts')
를 호출하여
‘post’라는 쿼리를 무효화하고 새로운 데이터를 가져오도록 요청한다.
이를 통해 사용자가 데이터를 갱신할 때 기존 데이터를 즉시 업데이트할 수 있다.
결론
따라서, invalidateQueries는 리액트 쿼리에서 데이터 캐시 관리를 유연하게 제어하고,
실시간으로 데이터를 업데이트 하는 데 유용한 기능이다.
This post is licensed under CC BY 4.0 by the author.