React/React Core

16.Jotai로 배우는 React 상태 관리: 최소화된 경량 상태 관리 솔루션

코딩쉐프 2024. 12. 3. 00:00
728x90

"Jotai로 배우는 React 상태 관리: 최소화된 경량 상태 관리 솔루션"


1시간 분량 강의안 (Jotai 기초)

강의 목표

  1. Jotai의 개념과 필요성을 이해한다.
  2. Jotai의 주요 기능(Atoms, Selectors)을 학습한다.
  3. Jotai를 활용하여 React 애플리케이션에서 효율적으로 상태를 관리하는 방법을 익힌다.

강의 목차


1. Jotai란 무엇인가? (10분)

Jotai의 정의

  • Jotai는 React를 위한 최소화된 상태 관리 라이브러리로, 상태를 단일 객체 대신 여러 Atom으로 분리하여 관리할 수 있습니다.
  • "Jotai"는 일본어로 "원자(atom)"를 의미하며, Atomic 상태 관리를 목표로 합니다.

Jotai의 주요 특징

  1. 간결한 API: 상태 정의와 사용이 간단.
  2. Atomic 상태 관리: 필요한 상태만 구독하여 성능 최적화.
  3. React 친화적: React의 useState와 유사한 방식으로 상태 관리.
  4. 모듈화: 상태를 독립적으로 관리하고 재사용 가능.

Jotai의 주요 구성 요소

  1. Atom: 상태의 최소 단위.
  2. Derived Atom: 기존 Atom의 값을 기반으로 생성된 파생 상태.

2. Jotai 설치 및 기본 설정 (10분)

1단계: Jotai 설치

  • Jotai 설치:
npm install jotai

2단계: 기본 Atom 생성

  • 상태를 정의하는 Atom 작성:
import { atom } from 'jotai';

export const countAtom = atom(0); // 초기값 0

3. Jotai 주요 개념 및 구현 (20분)

1단계: Atom 사용

  • React 컴포넌트에서 Atom의 상태를 가져와 사용:
import React from 'react';
import { useAtom } from 'jotai';
import { countAtom } from './atoms';

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

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
      <button onClick={() => setCount(count - 1)}>Decrement</button>
    </div>
  );
};

export default Counter;

2단계: Derived Atom 생성

  • 기존 Atom을 기반으로 파생 상태 생성:
import { atom } from 'jotai';
import { countAtom } from './atoms';

export const doubleCountAtom = atom((get) => get(countAtom) * 2);

3단계: Derived Atom 사용

  • React 컴포넌트에서 Derived Atom 값 사용:
import React from 'react';
import { useAtom } from 'jotai';
import { doubleCountAtom } from './atoms';

const DoubleCounter = () => {
  const [doubleCount] = useAtom(doubleCountAtom);

  return <p>Double Count: {doubleCount}</p>;
};

export default DoubleCounter;

4단계: 비동기 Atom 생성

  • 비동기 데이터를 관리하는 Atom:
import { atom } from 'jotai';

export const asyncDataAtom = atom(async () => {
  const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
  return response.json();
});

4. 고급 Jotai 기능 (10분)

1단계: Atom의 상태 조작

  • Atom의 상태를 직접 설정하는 함수 작성:
const incrementAtom = atom(
  (get) => get(countAtom),
  (get, set) => set(countAtom, get(countAtom) + 1)
);

2단계: Atom Family

  • 비슷한 역할을 가진 여러 Atom을 동적으로 생성:
import { atomFamily } from 'jotai/utils';

const itemAtomFamily = atomFamily((id) => atom({ id, value: 0 }));

3단계: Jotai Devtools

  • 상태 디버깅을 위한 Devtools 설치:
    npm install jotai-devtools

  • 사용:
import { useAtomsDebugValue } from 'jotai-devtools';

function DebugComponent() {
  useAtomsDebugValue();
  return null;
}

5. 실습 과제 (10분)

실습 과제

  1. Jotai를 사용하여 카운터 애플리케이션을 구현하세요.
  2. Derived Atom을 사용하여 카운터 값을 두 배로 계산하여 화면에 표시하세요.
  3. 비동기 Atom을 생성하여 API 데이터를 화면에 표시하세요.

예제

  • 비동기 데이터 컴포넌트:
import React from 'react';
import { useAtom } from 'jotai';
import { asyncDataAtom } from './atoms';

const AsyncData = () => {
  const [data] = useAtom(asyncDataAtom);

  if (!data) return <p>Loading...</p>;

  return (
    <div>
      <h1>{data.title}</h1>
      <p>{data.body}</p>
    </div>
  );
};

export default AsyncData;

6. Q&A 및 정리 (10분)

  • Q&A:
    1. Jotai는 어떤 상황에서 적합한 상태 관리 도구인가요?
    2. Jotai와 Zustand의 차이점은 무엇인가요?
  • 요약:
    • Jotai는 최소화된 상태 관리 라이브러리로, 간단한 API를 통해 효율적으로 상태를 관리할 수 있습니다.
    • Atom과 Derived Atom을 사용해 상태와 파생 데이터를 관리합니다.
    • React와 자연스럽게 통합되며, 비동기 데이터를 쉽게 관리할 수 있습니다.
728x90