React/Zustand

Zustand를 활용(7): Zustand와 React Suspense 연동

atomicdev 2024. 10. 15. 13:37
728x90

Zustand와 React Suspense 연동

Zustand와 React Suspense를 연동하여 비동기 데이터를 관리하는 과정

내용:

  • React Suspense를 활용한 비동기 데이터 처리: React Suspense는 비동기 로직을 간편하게 처리할 수 있는 방법을 제공합니다. 이 강의에서는 Zustand와 React Suspense를 연동하여, 비동기 데이터가 로딩될 때 적절하게 상태를 관리하고, 렌더링을 제어하는 방법을 다룹니다.
  • Zustand와 Suspense를 결합한 상태 관리: Zustand에서 관리되는 상태와 Suspense를 결합하여 비동기 데이터 처리와 상태 관리를 최적화하는 방법을 배웁니다.

실습:

  1. Suspense를 이용하여 데이터 로딩 상태 처리:
    • 비동기 데이터가 로딩되는 동안 Suspense가 로딩 화면을 표시하도록 구현.
    • Zustand로 관리되는 상태에 비동기 API 호출을 처리하고 Suspense와 함께 활용.
  2. Zustand에서 비동기 데이터를 관리:
    • Zustand에서 비동기 데이터를 로드하고, Suspense를 통해 로딩 상태를 관리하는 실습을 진행.

샘플 코드:

// Zustand Store with async action
import create from 'zustand';

const useStore = create((set) => ({
  data: null,
  fetchData: async () => {
    const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
    const result = await response.json();
    set({ data: result });
  },
}));

// Suspense component
import React, { Suspense } from 'react';
import { useStore } from './store';

const DataComponent = () => {
  const data = useStore((state) => state.data);

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

const FetchComponent = () => {
  const fetchData = useStore((state) => state.fetchData);

  React.useEffect(() => {
    fetchData();
  }, [fetchData]);

  return <DataComponent />;
};

const App = () => (
  <Suspense fallback={<div>Loading...</div>}>
    <FetchComponent />
  </Suspense>
);

export default App;

강의 흐름:

  1. Suspense 소개: Suspense가 제공하는 로딩 처리 기능 설명.
  2. Zustand에서 비동기 데이터를 관리하는 방법 설명.
  3. 실습: Zustand로 데이터를 관리하고, Suspense로 로딩 상태 처리하기.
728x90