useActionState와 useFormStatus
useActionState로 대기 상태와 오류를 추적하고, useFormStatus로 요청 처리 중 제출 버튼을 비활성화합니다.
useActionState와 useFormStatus은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
useActionState 소개
useActionState(action, initialState)는 제출 과정에서 서버 액션의 상태를 추적하도록 감싸는 리액트 19의 훅입니다. 액션 함수와 초기 상태 값을 받아 전체 폼 경험을 구동하는 데 사용할 수 있는 튜플을 반환합니다.
반환 튜플
이 훅은 [state, formAction, isPending]를 반환합니다. state에는 액션이 가장 최근에 반환한 값이 저장됩니다(null 또는 사용자가 지정한 초기 값으로 시작). formAction은 폼에 전달할 래핑된 액션입니다. isPending은 액션이 서버에서 실행되는 동안 true입니다.
제출 사이의 상태 추적하기
폼이 제출될 때마다 서버 액션이 실행되고, 반환값이 새로운 state가 됩니다. 처음 렌더링할 때 state는 initialState와 같습니다. 따라서 이전 제출이 있었는지와 그 결과가 무엇이었는지에 따라 서로 다른 화면을 간단하게 표시할 수 있습니다.
인라인 유효성 검사 오류 표시하기
서버 액션이 { errors: { email: 'Invalid email' } }을 반환하면 다음과 같이 오류를 인라인으로 표시할 수 있습니다: {state.errors?.email && <p>{state.errors.email}</p>}. 상태는 다시 렌더링되는 동안 유지되므로, 다음 제출이 성공하여 상태를 대체할 때까지 오류 메시지가 계속 표시됩니다.
성공 메시지 표시하기
액션이 { success: true }를 반환하면 컴포넌트에서 다음과 같이 성공 메시지를 렌더링할 수 있습니다: {state?.success && <p>Form submitted!</p>}. 상태 값에 따라 폼을 조건부로 숨기거나 성공 메시지로 바꿀 수 있습니다.
useFormStatus 소개
useFormStatus()는 가장 가까운 상위 <form> 요소의 대기 상태를 읽는 훅입니다. 이 훅은 { pending: boolean }을 포함한 객체를 반환합니다. 폼을 렌더링하는 컴포넌트 자체가 아니라 폼의 자식인 컴포넌트 내부에서 사용해야 합니다.
위치 제한이 존재하는 이유
useFormStatus를 폼 내부에서 사용해야 하는 이유는 이 훅이 자신보다 위에 있는 리액트 트리에서 폼의 컨텍스트를 읽기 때문입니다. 폼을 렌더링하는 동일한 컴포넌트에서 호출하면 폼의 자식이 아니라 형제 요소가 되므로 폼의 상태에 접근할 수 없습니다.
제출 버튼 컴포넌트 만들기
표준 패턴은 제출 버튼을 별도의 컴포넌트로 추출하는 것입니다: function SubmitButton() { const { pending } = useFormStatus(); return <button disabled={pending}>Submit</button>; }. 그런 다음 이 컴포넌트를 폼 내부에 배치하면 폼의 대기 상태에 접근할 수 있습니다.
제출 버튼 비활성화하기
제출 버튼에 disabled={pending}을 설정하면 중복 제출을 방지할 수 있습니다. 사용자가 제출을 클릭하고 서버 액션이 실행되는 동안에는 pending이 true이므로 버튼이 비활성화되어 클릭할 수 없게 됩니다. 액션이 완료되면 pending이 false로 돌아가고 버튼이 다시 활성화됩니다.
두 훅 결합하기
완성된 폼 사용자 경험 패턴은 두 훅을 결합합니다. 폼 컴포넌트에서는 useActionState가 액션 결과를 추적하고 formAction을 제공하며, 자식 SubmitButton 컴포넌트 내부에서는 useFormStatus가 대기 상태를 추적합니다. 두 훅을 함께 사용하면 유효성 검사 오류 표시와 반응성 있는 제출 버튼을 구현할 수 있습니다.
useOptimistic을 사용한 낙관적 화면
더욱 반응성 있는 사용자 경험을 위해 useOptimistic을 useActionState와 함께 사용할 수 있습니다. 서버가 응답하기 전에 예상 결과로 화면을 즉시 업데이트한 다음 실제 응답이 도착하면 조정합니다. 이 패턴은 좋아요 버튼, 할 일 목록 및 빠른 피드백이 필요한 기타 상호작용에서 자주 사용됩니다.
useFormStatus의 위치
올바르게 작동하려면 useFormStatus를 어디에서 호출해야 합니까?
단원 요약
useActionState(action, initialState)는 서버 액션 결과를 추적하기 위해 [state, formAction, isPending]를 반환합니다. 상태에는 액션의 반환값이 저장되므로 인라인 오류와 성공 메시지를 표시할 수 있습니다. useFormStatus()는 폼의 자식 컴포넌트 내부에서 { pending }을 제공하여 반응성 있는 제출 버튼을 구현할 수 있게 합니다. 두 훅을 함께 사용하면 완전하고 접근성 높은 폼 경험을 만들 수 있습니다.
자주 묻는 질문
“useActionState와 useFormStatus” 강의는 무료인가요?
네 — “useActionState와 useFormStatus” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“useActionState와 useFormStatus”에서 뭘 배우나요?
useActionState로 대기 상태와 오류를 추적하고, useFormStatus로 요청 처리 중 제출 버튼을 비활성화합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
React Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“useActionState와 useFormStatus” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- React 19와 Next.js의 서버 액션
- 폼 액션: 변경 작업에서 API 경로 대체하기
- useActionState와 useFormStatus
- 서버 액션을 활용한 점진적 향상