1. 문제 상황
- 2단계에서 '이전' 버튼을 누르면 1단계 페이지로 돌아가기는 하지만, 이전 단계에서 입력한 내용이 폼에 유지되지 않는 문제가 발생했습니다.
- 다행히 supabase의 child 테이블에는 데이터가 저장되어 있는 상태입니다.
2. 해결 과정
1) RegisterForm 컴포넌트 수정
- RegisterForm 컴포넌트에서 RegisterChildInfo으로 childInfo를 props로 전달하여, 이전에 입력된 정보가 유지될 수 있도록 설정했습니다.
const RegisterForm: React.FC<ChildCardProps> = ({ userId }) => {
// `child`가 없을 경우 빈 객체로 초기화하여 상태 관리
const [childInfo, setChildInfo] = useState<Partial<Child>>({});
- RegisterChildInfo에 childInfo를 전달하여 기존 정보를 불러옵니다.
<RegisterChildInfo
onNext={handleNext}
userId={userId}
childInfo={childInfo} // `childInfo`를 props로 전달
/>
2) RegisterChildInfo 컴포넌트 수정
- RegisterChildInfo 컴포넌트에서 childInfo를 받아 폼의 defaultValues에 기존 값을 설정하여, 입력한 내용이 폼에 유지되도록 수정했습니다.
import { Child } from "@/types/childType";
interface RegisterChildInfoProps {
onNext: (data: Partial<Child>) => void;
userId: string;
childInfo: Partial<Child>; // `childInfo` 타입 추가
}
const RegisterChildInfo = ({ onNext, userId, childInfo }: RegisterChildInfoProps) => {
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
defaultValues: {
name: childInfo.name || "", // `childInfo`에서 이름 가져오기
birth: childInfo.birth || "", // `childInfo`에서 생년월일 가져오기
notes: childInfo.notes || "" // `childInfo`에서 메모 가져오기
}
});
return (
<div>
{/* 코드 */}
</div>
);
};
export default RegisterChildInfo;
3. 결과
- 이제 '이전' 버튼을 누르고 돌아가도 입력한 내용이 폼에 유지됩니다.
- RegisterForm에서 childInfo를 상태로 관리하고, RegisterChildInfo에 해당 상태를 props로 전달함으로써 폼의 상태를 보존하는 방식을 배울 수 있었습니다.
4. 배운 점
- 폼 상태 유지의 중요성
'이전' 버튼 기능을 통해 폼을 단계적으로 이동할 때, 상태가 유지되지 않으면 사용자 경험이 크게 저하될 수 있음을 배웠습니다. 특히, 한 번 입력한 정보가 사라지지 않도록 폼의 상태를 유지하고 관리하는 것이 중요하다는 것을 깨달았습니다. - Props를 이용한 데이터 전달
여러 단계로 이루어진 폼에서 각 단계 간에 데이터를 전달하고 상태를 유지하려면 상위 컴포넌트에서 상태를 관리하고 하위 컴포넌트로 전달하는 방식이 효과적임을 알게 되었습니다. childInfo를 RegisterChildInfo으로 props로 전달하여 폼의 데이터를 유지하는 구조가 유용했습니다. - 기본값 설정으로 상태 초기화 문제 해결
useForm의 defaultValues 옵션을 통해 초기 값을 설정하여, 폼 컴포넌트가 마운트될 때 이전 단계에서 입력한 값을 쉽게 가져올 수 있었습니다. 이를 통해 폼의 데이터를 쉽게 초기화하고 유지할 수 있는 방법을 배웠습니다. - 상태 초기화 및 관리의 필요성
useState를 사용하여 상태를 빈 객체로 초기화하는 방법을 배우며, 사용자 입력 상태를 안전하게 관리하는 방법을 익혔습니다. 특히, 상태가 누락되거나 잘못 초기화될 가능성을 줄이는 방식에 대해 이해가 깊어졌습니다. - 폼 단계 간 데이터 흐름에 대한 이해
폼의 여러 단계에서 데이터를 흐르게 하려면, 상태를 상위 컴포넌트에서 관리하고 필요한 하위 컴포넌트로 전달하는 방식을 사용해야 함을 알게 되었습니다. 이를 통해 페이지 간의 상태 관리 및 데이터 흐름을 보다 체계적으로 이해하게 되었습니다.
이번 문제 해결을 통해 프로젝트에서 폼 데이터 관리와 상태 유지의 기본 원리를 깊이 이해하고, 실전에서 이를 어떻게 적용할 수 있는지에 대한 좋은 경험을 얻었습니다.
'🚀 프로젝트 > 따꼼' 카테고리의 다른 글
| 따꼼 트러블 슈팅 | React + Supabase 중복 데이터 삽입 문제 해결하기 (0) | 2024.11.20 |
|---|---|
| 따꼼 트러블 슈팅 | 아이카드에서 기본 프로필 이미지 오류 해결 과정 (0) | 2024.11.19 |
| 따꼼 트러블 슈팅 | 아이 접종 리스트 데이터 전송 오류 해결 과정 (0) | 2024.11.12 |
| 따꼼 트러블 슈팅 | React 프로젝트의 자녀 정보 조회 오류 해결 (0) | 2024.11.11 |
| 따꼼 트러블 슈팅 | Supabase 이미지 업로드 오류 수정 error 403 (0) | 2024.11.10 |