[A project ] study(1) React Query랑 jotai

dev kyu·2025년 1월 10일

project

목록 보기
3/15

React Query란,

React Query는 서버 상태 관리에 특화된 라이브러리로, 데이터를 가져오고, 캐싱하고, 동기화하는 작업을 효율적으로 관리.

  • React Query 특징

    • 서버 상태 관리: 서버에서 가져온 데이터(API 호출 등)를 관리.
    • 자동화: 데이터 페칭, 캐싱, 업데이트, 리페치(새로고침) 과정을 자동으로 처리.
    • 리액티브 상태: 데이터가 변경되면 UI가 자동으로 업데이트.
    • 비동기 처리 간소화: 로딩 상태, 에러 상태 등을 쉽게 관리.
    • 언제 사용하면 좋을까?
      REST API 또는 GraphQL과 같은 서버 데이터를 자주 호출하거나, 데이터를 동기화해야 하는 경우. 또는 서버 데이터를 효율적으로 캐싱하고 관리하고 싶을 때.
  • React Query 예시

import { useQuery } from 'react-query';

const fetchUsers = async () => {
  const res = await fetch('/api/users');
  return res.json();
};

const Users = () => {
  const { data, isLoading, error } = useQuery('users', fetchUsers);

  if (isLoading) return <div>Loading...</div>;
  if (error) return <div>Error: {error.message}</div>;

  return (
    <ul>
      {data.map((user) => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
};

Jotai란,

Jotai는 가벼운 전역 상태 관리 라이브러리로, 각 상태를 독립적인 "원자(atom)"로 관리.

  • Jotai 특징

    • 클라이언트 상태 관리: 클라이언트 상태를 가볍고 유연하게 관리할 수 있도록 설계.
    • 가벼움: 최소한의 코드로 전역 상태를 관리할 수 있음.
    • 유연성: 상태를 동적으로 조합하거나 비동기 상태를 쉽게 관리 가능.
    • React Hooks와 통합: React의 기본 API처럼 간단하게 사용 가능.
    • 언제 사용하면 좋을까?
      간단한 전역 상태를 관리하거나, 필요한 컴포넌트만 상태를 구독하도록 설계하고 싶을 때. 또는 Redux나 Zustand보다 더 심플한 상태 관리 솔루션을 선호할 때.
  • Jotai 예시

import { atom, useAtom } from 'jotai';

// 상태 선언
const countAtom = atom(0);

const Counter = () => {
  const [count, setCount] = useAtom(countAtom);

  return (
    <div>
      <button onClick={() => setCount((c) => c - 1)}>-</button>
      <span>{count}</span>
      <button onClick={() => setCount((c) => c + 1)}>+</button>
    </div>
  );
};

🔍 React Query와 Jotai를 함께 사용할 때

React Query는 서버 상태를, Jotai는 클라이언트 상태를 관리하도록 결합할 수 있어.
예를 들어: React Query로 API 데이터를 가져오고, Jotai로 컴포넌트 간 상태 공유를 간단히 구현.

import { atom, useAtom } from 'jotai';
import { useQuery } from 'react-query';

const userAtom = atom(null);

const fetchUser = async () => {
  const res = await fetch('/api/user');
  return res.json();
};

const User = () => {
  const { data } = useQuery('user', fetchUser);
  const [, setUser] = useAtom(userAtom);

  if (data) setUser(data);

  return <div>User: {data?.name}</div>;
};

🚀 진짜 쉬운 설명

  • React Query와 Jotai의 차이점
특징React QueryJotai
주요 목적서버 상태 관리 (API 호출 데이터)클라이언트 상태 관리
관리 대상서버에서 가져온 데이터 (REST API, GraphQL 등)애플리케이션 내부에서 사용되는 상태 (UI 상태, 사용자 입력 등)
캐싱 지원강력한 데이터 캐싱 및 동기화 기능 제공캐싱 기능 없음
비동기 처리데이터 페칭, 로딩 상태, 에러 처리 등을 자동으로 관리비동기 상태를 커스터마이징하여 관리 가능
상태 구조화데이터는 주로 API 호출 단위로 관리상태를 Atom(원자) 단위로 분리해 관리
사용 난이도초반 학습 필요 (API 패칭과 캐싱 로직 익숙해져야 함)React Hooks와 유사하여 간단히 사용할 수 있음
적합한 사용 사례서버와의 데이터 통신이 빈번하거나, 데이터 캐싱과 동기화가 중요한 경우간단한 전역 상태 관리 또는 상태를 세밀하게 조정해야 하는 경우
  • React Query
    • 서버 데이터(REST API, GraphQL)를 관리.
    • 데이터 페칭, 캐싱, 동기화, 비동기 상태 처리에 강점.
  • Jotai
    • 간단하고 가벼운 전역 상태 관리.
    • 클라이언트 측 상태 공유에 적합.
profile
dev kyu

0개의 댓글