250x250
반응형
arkhyeon
arkhyeon
arkhyeon
전체 방문자
오늘
어제
  • 분류 전체보기 (88)
    • Spring (5)
    • Java (4)
    • React (25)
      • TypeScript (6)
      • JavaScript (1)
      • Jest (9)
    • NEXT (8)
    • SQL (1)
    • React native (1)
    • CSS (3)
    • Web (1)
    • Git (3)
    • ETC (6)
    • 빅데이터DB (8)
    • Docker (4)
    • Tool (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • react
  • react usetransition
  • react jest
  • usetransition
  • react spring websocket
  • kudu
  • websocket server
  • javasciprt websocket
  • WSS
  • HIVE
  • react19
  • jest
  • react loading
  • react websocket
  • Spring WebSocket
  • node WebSocket
  • docker tomcat
  • javascript wss
  • websocket
  • react typescript

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
arkhyeon

arkhyeon

React

React 19 useTransition을 활용한 Axios 데이터 로딩과 상태 업데이트

2025. 1. 10. 10:54
728x90
반응형
useTransition 은 시간이 걸리는 비동기 작업(예: 데이터 요청, 상태 업데이트)을 낮은 우선순위로 처리하여 UI가 멈추지 않고 계속 반응하여 사용자 경험을 향상시킬 수 있습니다.

예제 코드: useTransition을 사용한 비동기 상태 업데이트

1. App.jsx

//App.jsx
import { useState, useTransition } from "react";
import Employees from "./Employees.jsx";

function App() {
  const [id, setId] = useState(0);

  return (
    <div className="min-h-screen bg-gray-100 p-6">
      <div className="max-w-3xl mx-auto bg-white shadow-lg rounded-lg p-6">
        <h1 className="text-2xl font-bold text-center mb-4">부서 검색</h1>
        <div className="flex gap-2 mb-6">
          <input
            type="number"
            placeholder="부서 ID를 입력하세요"
            className="flex-1 border border-gray-300 rounded-md px-3 py-2"
            value={id}
            onChange={(e) => setId(Number(e.target.value))}
          />
        </div>
        <div>
          <Employees id={id} />
        </div>

        {id === 0 && (
          <p className="text-red-500 text-center">
            해당 부서를 찾을 수 없습니다.
          </p>
        )}
      </div>
    </div>
  );
}

export default App;

왜 useTransition 두 번 사용했는가?

  • 한 번 : 서버 요청이 오래 걸릴 경우, 요청 중간에 발생한 모든 상태 변경이 순차적으로 UI에 반영되면서 깜박일 수 있습니다.
  • 두 번 : 요청 중간에 상태 변경이 UI에 반영되지 않고, 마지막 요청 결과만 UI에 반영되므로 여러 번 요청이 발생하거나 서버 요청이 오래 걸리는 경우 더 안정적이고 UI가 깔끔하게 유지됩니다.

2. Emplyees.jsx

//Emplyees.jsx
import { useState, useTransition } from "react";
import { axios } from "./axios.js";

function Employees({ id }) {
  const [empList, setEmpList] = useState([]);
  const [isPending, startTransition] = useTransition();

  if (id === 0) return null;

  const handleSubmit = () => {
    startTransition(async () => {
      try {
        const data = await fetchData(id);
        startTransition(() => {
          setEmpList(data);
        });
      } catch (err) {
        console.log(err);
      }
    });
  };
  
  return (
    <div>
      <button onClick={handleSubmit} disabled={isPending}>
        {isPending ? "Loading..." : "Update"}
      </button>
      <ul>
        {empList.map((employee) => (
          <li key={employee.employeeId}>{employee.name}</li>
        ))}
      </ul>
    </div>
  );
}

export default Employees;

const fetchData = async (id) => {
  const response = await axios.get(`/employees/${id}`);
  await new Promise((resolve) => setTimeout(resolve, 3000));
  return response.data.employees;
};
728x90
반응형

'React' 카테고리의 다른 글

React 19 Data Caching (map, React Query, swr)  (0) 2025.01.13
React Suspense와 use로 빈 데이터 문제 해결하기  (0) 2025.01.10
React 19의 useTransition을 활용한 비동기 상태 업데이트와 UI 반응성 향상  (0) 2025.01.09
React 19 useTransition vs React 18 pending 처리 : 로딩 상태 관리의 차이점  (0) 2024.12.31
[React19] React 19 ref와 React 18 forwardRef 비교  (0) 2024.12.31
    'React' 카테고리의 다른 글
    • React 19 Data Caching (map, React Query, swr)
    • React Suspense와 use로 빈 데이터 문제 해결하기
    • React 19의 useTransition을 활용한 비동기 상태 업데이트와 UI 반응성 향상
    • React 19 useTransition vs React 18 pending 처리 : 로딩 상태 관리의 차이점
    arkhyeon
    arkhyeon

    티스토리툴바