리액트 훅 | useActionState에 대해 알아보기

2025. 8. 14. 17:46·FRONTEND/React

 

리액트 19 버전으로 업데이트되면서 새로 생긴 훅이 존재했는데요,

그중 하나가 바로 useActionState 입니다 !!

 

이번 글에서는 useActionState에 대해 한번 살펴보겠습니다.

 

1. useActionState란?

먼저 공식문서를 살펴보니, Action이라 불리는 이 친구는

주로 비동기 요청(특히 폼 제출, 서버 호출 등)을 감싸는 함수를 의미합니다.

 

useActionState는 이 Action을 감싸고 다음과 같은 역할을 수행합니다.

- 반환값을 상태로 저장

- 로딩 상태를 자동 관리

 

즉, 폼 제출 후 액션 함수가 반환한 결과가 곧 컴포넌트의 상태가 되고,

로딩 상태도 isPending으로 자동 추적됩니다.

 

 

2. useActionState 사용 이유

기존 방식 (useState)

- 결과, 오류, 로딩을 각각 useState로 선언

- 버튼 클릭 시 다음과 같은 과정을 직접 작성

  (1) setIsPending(true)

  (2) 서버 요청 / 로직 수행

  (3) 성공이면 setNumbers(...), 실패면 setError(...)

  (4) 마지막에는 setIsPending(false)

=> 즉, 상태 토글과 결과 반영까지 직접 작성해야 한다는 번거로움이 존재했습니다.

 

useActionState 방식

- 액션 함수가 반환한 값이 곧 상태

- 로딩도 자동으로 isPending에 반영 (직접 설정할 필요 X)

- <form action={formAction}> 으로 제출하면 끝

=> 결과, 오류, 로딩 관련 코드 대부분을 없앨 수 있어서 코드가 짧아지고 실수도 줄어듭니다.

 

3. useActionState 기본 형태

const [state, formAction, isPending] =
  useActionState(actionFn, initialState, permalink?);

 

1) actionFn

  - 폼이 제출되거나 버튼이 클릭될 때 실행되는 함수

  - 첫번째 인수 : 이전 상태(prevState)

  - 이후 인수 : 폼 데이터(FormData) 등 일반 폼 액션에서 받는 값

  - 반환값은 컴포넌트의 상태가 됨

async function actionFn(prevState, formData) {
  // prevState: 이전 상태
  // formData: 폼에 입력된 값
  return { ... }; // 이 반환값이 state로 자동 반영됨
}

 

2) initialState

  - 처음 렌더링될 때 state가 가질 값

  - 직렬화 가능한 값이면 무엇이든 가능 (객체, 배열, 문자열 등)

const initialState = { numbers: null, error: null };

 

3) permalink (선택)

  - 폼이 수정하는 고유한 페이지 URL

  - 일반적인 클라이언트 전용 앱이라면 생략 가능

 

4) 반환값

useActionState는 배열을 반환합니다.

반환값 설명
state 액션 실행 결과(액션 함수가 반환한 값)
formAction <form action={formAction}> 또는
<button formAction={formAction}> 에 넣을 액션 실행 함수 
isPending 액션일 실행 중이면 true, 아니면 false

 

 

4. 예제를 통해 살펴보기

이번에는 로또 번호 생성기를 예로 들어서,

useState버전과 useActionState 버전을 비교해 보겠습니다.

(1) useState 버전 - 모든 상태를 직접 관리

특징

- 상태 3개(numbers, error, isPending)를 각각 관리

- 로딩 시작/종료, 결과/에러 세팅까지 모두 수동 처리

- 코드가 길고, 토글 시점 실수 가능성 존재

 

(2) useActionState 버전 - 반환값과 로딩을 자동 관리

특징

- lottoAction의 반환값이 자동으로 state에 반영

- 로딩 상태(isPending) 자동 관리

- form 제출만으로 실행 가능 (onClick 핸들러 불필요)

- 코드가 훨씬 짧고 명확함

 

비교 정리

구분 useState useActionState
상태 선언 3개(numbers, error, isPending) 1개(state), 자동 로딩
로딩 관리 수동(setIsPending) 자동(isPending)
결과/에러 반영 setNumbers, setError 직접 호출 액션 반환값 자동 반영
호출 방식 버튼 onClick 이벤트 <form action> 제출

 

이렇게 코드를 살펴보면서 "왜 useActionState가 간단하고 안전한지"를 바로 느낄 수 있습니다.


마무리

useActionState는 React19에서 새로 추가된 훅으로,

폼 제출이나 서버 호출과 같은 비동기 액션의 결과와 로딩 상태를 자동으로 관리해 줍니다.

 

또한, 기존 useState 방식과 다르게 액션 함수의 반환값이 곧 상태가 되며

로딩은 isPending으로 자동 추적되고, form 제출만으로 호출이 가능합니다.

 

덕분에 코드의 길이는 짧아지고, 상태 관리 실수를 줄어듭니다 !

 

다만, 폼이 필요 없는 단순한 UI나 로컬 상태 관리라면 기존 useState가 더 간단할 수 있다는 사실 !

상황에 따라 적절한 방식을 선택하는 것이 중요합니다.

'FRONTEND > React' 카테고리의 다른 글

비동기 처리에서의 Race Condition 정리  (1) 2025.12.11
리액트 훅 | useContext에 대해 알아보기  (1) 2025.08.18
리액트 훅 | useMemo에 대해 알아보기  (6) 2025.08.13
리액트 훅 | useCallback에 대해 알아보기  (8) 2025.08.12
리액트 훅 | useEffect에 대해 알아보기  (5) 2025.08.11
'FRONTEND/React' 카테고리의 다른 글
  • 비동기 처리에서의 Race Condition 정리
  • 리액트 훅 | useContext에 대해 알아보기
  • 리액트 훅 | useMemo에 대해 알아보기
  • 리액트 훅 | useCallback에 대해 알아보기
uoaheu
uoaheu
uoaheu 님의 블로그 입니다.
  • uoaheu
    uoaheu 님의 블로그
    uoaheu
  • 전체
    오늘
    어제
    • 분류 전체보기 (50)
      • 알고리즘 (7)
      • CS (9)
      • FRONTEND (9)
        • React (12)
        • Kotlin (1)
        • JS (5)
        • HTML (2)
      • SQL (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    토스 uiux
    혼자서 공부하는 네트워크
    boj25418
    이더넷프레임
    BFS
    유레카3기
    백준1926번
    mysql
    toss uiux
    알고리즘
    부트캠프후기
    mysql로 피벗테이블만들기
    멀티캠퍼스it부트캠프
    useactionstate
    엘지유플러스유레카프론트엔드
    리액트usestate
    mysql 피벗테이블
    토스 앱 분석
    toss 분석
    토스분석
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
uoaheu
리액트 훅 | useActionState에 대해 알아보기
상단으로

티스토리툴바