콘텐츠로 이동

shadcn Dialog + useForm — 모달 닫힐 때 폼 상태 미초기화 함정

증상

Dialog 닫았다가 재열면 이전 입력값·에러·로컬 state가 잔류.

근본 원인

Radix Dialog는 open=false에서도 닫기 애니메이션 동안 DOM 유지 → useForm 상태 언마운트 안 됨.

해결

const { reset } = form;
useEffect(() => {
  if (!open) {
    reset();
    setSelectedEmp(null);  // rhf 외부 state도 함께
  }
}, [open, reset]);

deps에 form 전체 대신 reset 구조분해 (무한루프 방지).

체크리스트

  • Dialog + useForm → 반드시 useEffect([open, reset]) 초기화
  • rhf 외부 useState도 같은 블록에서 초기화
  • 읽기 전용 Dialog에는 불필요

관련

적용 커밋

204f466 (AssetAssignModal, AssetRecallModal)