useActionState 가 Action 을 state 관리로 감쌈. 모든 제출 결과가 새 state 됨. Pending 자동 추적. 더는 setIsLoading 춤 없음.
시그니처
const [state, formAction, isPending] = useActionState(actionFn, initialState) — actionFn 이 (prevState, formData) => Promise<newState>. Hook 이 반환:
- state — 최신 state (첫 render 에 initial, 그 후 마지막 action 이 반환한 것).
- formAction —
<form action={...}>에 바인딩할 wrapped 함수. - isPending — Action 이 in-flight 동안 true.
Reducer-모양 action
본인 actionFn 이 FormData 도 받는 useReducer reducer 처럼 보임. 첫 인자가 이전 state; 두 번째가 제출된 FormData. 반환 값 (또는 resolve 된 promise 값) 이 새 state.
왜 이 모양? 에러와 success 가 같은 반환 경로 사용. 실패 시 { error: '...', input: ... } 반환 (재표시 위해 사용자 입력 보존), 성공 시 { data: ... }. 컴포넌트가 state 안 내용 기반 렌더 결정.
'이전 state 가 form 값 가짐' 패턴
서버 사이드 유효성 fail 시 사용자 제출 값과 함께 form 재표시 원함. Error state 의 일부로 반환. Form 의 uncontrolled input 이 React 가 재채움 (state 의 input 필드를 defaultValue 값으로 사용).
useActionState vs useState
useState 가 임의 setter 가진 임의 state 줌. useActionState 는 단일 action 의 success/failure 사이클에 묶인 state 줌. 합성: 클라이언트 전용 UI state (draft, 토글) 엔 useState, 제출 구동 state 엔 useActionState.