2023. 11. 16. 17:50ㆍTIL
react-form-hook이라는 아주 편리한 훅을 사용 중이다.
지금까지 느낀 점 중 베스트였던 것은 state를 장황하게 만들 필요가 없다는 점!
import { useForm } from "react-hook-form";
export const EditForm = () => {
const methods = useForm<{
orgName: string;
orgCode: string;
}>({
defaultValues: {
orgName: currentItem.name,
orgCode: currentItem.code,
},
});
const { register, setValue, getValues, watch } = methods;
return (
<Form>
<input
{...register("orgName")}
onChange={(e) => setValue("orgName", e.target.value)}
onBlur={() =>
watch("orgName").length < 1 &&
setValue("orgName", currentItem.name)
}
/>
</Form>
)
}
onChange함수는 input박스에서 typing할때마다 값을 setValue해준다.
그리고 그 value는 watch() 메서드로 확인해 볼 수 있다.
watch("orgName").length를 기존의 수정 전 값(currentItem)과 비교해준 이유는 해당 값이 필수값이기때문에 아무 입력이 없다면 input box가 focus out되었을때, 즉 input박스에 커서가 더 이상 없을때 기존 값(currentItem)을 넣어주기 위함이었다.
참고로 여기서 watch가 아닌 getValue를 사용해도 됐을거같다.(watch와 getValue의 차이점은 뭘까)
이렇게 수정 해준 데이터를 상위 컴포넌트로 보내줘야한다.
현재 상위 컴포넌트에서 수정모드 컴포넌트를 불러와주고있고 수정모드에서 업데이트 된 데이터는 저장 시 상위 컴포넌트로 보내주어야한다. 이런 경우야 수없이 겪었던 상황이지만 '저장'버튼이 수정모드(하위) 컴포넌트가아닌 상위 컴포넌트에 있다는 점에서 약간 당황하였었다.
useEffect(() => {
return () => setUpdateData(getValues());
}, []);
상위 컴포넌트에서 updateData, setUpdateData state를 생성해 하위로 setUpdateData를 보내주고있고, 하위 컴포넌트가 언마운트 될때 setUpdateData에 react-form-hook의 메서드인 getValues를 사용하여 수정된 데이터를 보내준다.
setState없이도 이렇게 간단하게 되다니!!!! 정말 setState를 남발했던 기존의 코드보다 훨씬 깔끔해졌다.
'TIL' 카테고리의 다른 글
React-hook-form defaultValues 업데이트는 reset을 사용해주기 (1) | 2023.11.30 |
---|---|
react-hook-form 시작하기 (1) | 2023.11.26 |
xlsx라이브러리 사용하여 엑셀 파일로 다운로드 기능 심어주기 (0) | 2021.12.28 |
📱모바일에서 💻pc버전으로 볼 수있도록 구현하기 (0) | 2021.11.26 |
자식컴포넌트에서 부모컴포넌트로 함수 보내주기 (0) | 2021.11.20 |