Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
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
more
Archives
Today
Total
관리 메뉴

juni

refetch, invalidateQueries / useQuery, useMutation 본문

CS

refetch, invalidateQueries / useQuery, useMutation

juni_shin 2024. 10. 9. 23:18

1. refetch:

  • 즉시 데이터를 다시 가져옵니다: refetch는 호출된 즉시 쿼리를 다시 실행하여 데이터를 갱신합니다.
  • 사용자 상호작용에 적합: 특정 이벤트(예: 버튼 클릭, 사용자 액션) 후 데이터를 즉시 갱신해야 할 때 적합합니다.
  • 단일 호출: 해당 컴포넌트에서 refetch()를 호출하면, 쿼리의 데이터를 한 번만 갱신합니다.

적합한 경우:

  • 데이터가 특정 사용자 액션 이후 즉시 새로 고쳐져야 하는 경우.
  • 예를 들어, 사용자가 버튼을 눌러 직접 데이터를 다시 가져오게 하는 상황.

2. invalidateQueries:

  • 쿼리를 무효화하고 필요할 때 다시 실행: 쿼리가 "더 이상 유효하지 않다"고 표시되며, react-query가 적절한 시점(예: 컴포넌트가 다시 마운트되거나, 페이지 포커스가 바뀔 때)에 쿼리를 자동으로 재실행하여 데이터를 가져옵니다.
  • 자동화된 데이터 갱신: invalidateQueries는 데이터를 즉시 다시 가져오는 것이 아니라, 쿼리를 "무효화"하여 다음번에 필요할 때 데이터를 다시 가져오게 만듭니다.
  • 유연성: 쿼리 무효화 후 여러 이벤트나 조건에 의해 자동으로 갱신되므로, 특정 시점에서 다시 데이터를 가져오는 상황에 적합합니다.

적합한 경우:

  • 데이터를 즉시 갱신할 필요는 없지만, 컴포넌트가 다시 마운트되거나 다른 트리거 조건에 의해 데이터를 갱신하고 싶은 경우.
  • 데이터가 여러 곳에서 사용되고, 일관된 데이터 상태를 유지해야 할 때.

 

1. useQuery: 데이터를 가져올 때 사용 (읽기 작업)

  • 목적: 서버에서 데이터를 **조회(fetch)**할 때 사용합니다.
  • 동작 방식: 주로 GET 요청을 처리하며, 캐시된 데이터를 활용하고 자동으로 데이터를 동기화하는 방식으로 동작합니다.
  • 특징:
    • 서버에서 데이터를 가져와서 클라이언트에서 사용하는 데 최적화되어 있습니다.
    • 데이터를 캐싱하고, 캐시된 데이터를 적절한 시점에 갱신하는 기능을 제공합니다.
    • 기본적으로 캐싱, 자동 리패칭, 중복 요청 방지 등의 기능을 가지고 있습니다.
    • 자동으로 리렌더링: 쿼리가 완료되거나 데이터가 갱신될 때 컴포넌트를 자동으로 리렌더링합니다.
import { useQuery } from '@tanstack/react-query';

// 서버에서 데이터를 조회하는 예시
const { data, error, isLoading } = useQuery('fetchData', fetchDataFunction);

 

2. useMutation: 데이터를 변경할 때 사용 (쓰기 작업)

  • 목적: 서버로 데이터를 전송하거나 수정, 삭제할 때 사용됩니다.
  • 동작 방식: 주로 POST, PUT, DELETE 등의 요청을 처리하며, 상태 변경이나 비동기 작업(예: 폼 제출, 데이터 업데이트)을 처리하는 데 사용됩니다.
  • 특징:
    • 데이터를 변경하는 작업에 사용됩니다.
    • 서버와의 상호작용이 성공하거나 실패했을 때 실행할 콜백 함수를 설정할 수 있습니다.
    • 낙관적 업데이트(Optimistic Update): 서버 요청이 성공하기 전에 UI 상태를 먼저 업데이트하는 방식도 가능합니다.
    • 자동으로 리패칭되지 않음: 서버에 요청한 후, 별도로 쿼리를 다시 실행하거나 쿼리를 무효화(invalidate)하여 데이터를 갱신할 필요가 있습니다.
import { useMutation } from '@tanstack/react-query';

// 서버에 데이터를 전송하는 예시
const mutation = useMutation(submitDataFunction, {
  onSuccess: () => {
    // 성공적으로 데이터를 보낸 후 실행할 콜백
  },
  onError: (error) => {
    // 실패 시 처리할 콜백
  },
});

 

'CS' 카테고리의 다른 글

Jest / Vitest  (1) 2024.10.11
세션, 쿠키  (2) 2024.10.10
flex-shrink, object-cover  (0) 2024.08.18
Next.js 6가지 원칙 및 4가지 랜더링 기법  (0) 2024.07.19
Next.js Rendering , Route Handlers  (0) 2024.07.03