React 19 가 HTML form 의 action 속성 오버로드. 문자열 전달 = 브라우저가 1993년부터 해온 대로 제출 처리. 함수 전달 = React 가 라이프사이클 소유.
두 모드
<form action="/save" method="POST">— 풀-페이지 브라우저 제출. JS 없이 동작. 웹이 항상 가졌던 모드.<form action={saveFn}>— React 가 제출 인터셉트,saveFn(formData)호출, pending state 관리, 기본 브라우저 제출 방지. JS 필요. React 19 가 추가한 모드.
함수 모드가 Actions 스토리 잠금 해제. 다음 다섯 레슨의 hook (useActionState, useFormStatus, useOptimistic) 다 form 이 function-action 모드라고 가정.
입력으로 FormData
Action 함수가 FormData 객체 받음 — 직렬화된 form 필드의 표준 브라우저 타입. formData.get('name') 으로 필드 읽음; formData.get('avatar') instanceof File 로 파일 체크. JSON 파싱 없음, 수동 필드 수집 없음.
제출에 reset
Action 이 성공적으로 돈 후 React 가 form 의 uncontrolled input 지움 (form reset). 값 유지 원하면 (controlled input, 멀티-스텝 form) useState 로 본인이 값 관리.
네이티브 form 동작에 무슨 일
HTML 유효성이 먼저 발화 (required, type=email, minlength). 사용자 입력이 네이티브 유효성 fail 하면 Action 안 돔. Action 안에선 이미 유효성 검증된 입력 받음 — 다만 보안 위해 서버 사이드 유효성도 여전히 (lesson 6 Zod).
Form 이 모델, 함수가 핸들러. React 19 의 Action 모델이 네이티브 form 계약에 기댐 — input 이름 짓고, 브라우저가 수집하게, React 한테 실제 작업할 함수 줘. 결과: 옛
onSubmit + e.preventDefault + 필드 수집 + fetch + setState 춤보다 짧음.