๋๋กญ๋ค์ด์ ๊ฐ์ React-Hook-Form์ผ๋ก ์ ์ดํ ๋
value๊ฐ์ด ๋๊ธฐํ๊ฐ ๋์ง ์๋ ์ํฉ

์์๊ณผ ๊ฐ์ด form์ ์ ์ถํ๋ฉด value ๊ฐ์ด ๋๊ธฐํ๋์ง ์๊ณ ์ด๊ธฐ ๊ฐ์ด ์ ์ถ๋๊ณ ์๋ค!
1. Dropdown ์ปดํฌ๋ํธ์ input์ value๊ฐ ์ ์์ ์ผ๋ก ๋ค์ด๊ฐ์๋์ง ํ์ธํด๋ณด๊ธฐ
<input type="hidden" name="assigneeUserId" value="8494">
๊ฐ๋ฐ์ ๋๊ตฌ๋ก ํ์ธํด๋ดค์ ๋ value ๊ฐ์ ์ ์์ ์ผ๋ก ๋ค์ด๊ฐ ์๋ค.
2. input์ value ๊ฐ ์ง์๋ณด๊ธฐ
React-Hook-Form์ register ํจ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก name, value, onChange, onBlur ๋ฑ์ด ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ value ๊ฐ์ ์ง์ ํ์ง ์๊ณ rest props์ผ๋ก ๋ด๋ ค์ฃผ๋ฉด ๋๋ค.
<input type="text" {...register} />
์ด๋ ๊ฒ ๋ณ๊ฒฝํด์ฃผ๊ณ input์ ๊ฐ์ ์
๋ ฅํ๊ณ submitํ๋ฉด ์ ์์ ์ผ๋ก ๊ฐ์ด ๋๊ธฐํ๋๋ค.
โช value๋ฅผ ์ง์ ์ง์ ํด์ฃผ์ง ์์์ผ ํ๋๋ฐ ๋๋ Dropdown์ ํ์๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ฉด ๊ทธ ํด๋ฆญํ ํ์๋ฉ๋ด์ id๋ฅผ value๋ก ์ง์ ํด์ค์ผ ํ๋ ์ํฉ์ด๋ค...
1. Dropdown์ input์ ์ ์ดํ ์ปดํฌ๋ํธ๋ก ๊ด๋ฆฌํ๊ธฐ
useState๋ก Dropdown์ input value๋ฅผ ๊ด๋ฆฌํ๋ฉด ๋ฌธ์ ๊ฐ ์์ ๊ฒ ๊ฐ์ง๋ง ๋ด๊ฐ ์ฌ์ฉํ๋ ๋ชจ๋ฌ์์๋ Dropdown๋ง ์๋ ๊ฒ์ด ์๋๋ผ ๋ค๋ฅธ input ๊ฐ๋ค๋ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ๊ฑด React-Hook-Form์ ์ฌ์ฉํ๊ณ Dropdown์ input์ useState๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ด์ง๊ฐ์ด ๋ ๋ค..
2. Dropdown์ input์ ref๋ฅผ ์ฐ๊ฒฐํ๊ธฐ
Dropdown์ input์ ref๋ฅผ forwardRef๋ก ์ฐ๊ฒฐํด์ ์ ์ถ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํด๋น input์ value ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์๋ ์์ง๋ง 1๋ฒ ๋ฐฉ์๊ณผ ๊ฐ์ด React-Hook-Form์ผ๋ก ๊ด๋ฆฌํ์ง ์๋ ๊ฒ์ด ์ด์ง๊ฐ์ด ๋ ๋ค..
3. <select>, <option> ํ๊ทธ ์ฌ์ฉํ๊ธฐ
Dropdown์ <select>, <option> ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด React-Hook-Form์ ์ฌ์ฉํด์ Dropdown์ value ๊ฐ์ ๋๊ธฐํํ ์ ์์ง๋ง ๊ธฐ๋ณธ <select>, <option> ํ๊ทธ์ ์คํ์ผ์ ์ฌ์ฉํด์ผ ํด์ ๋์์ธ์ด ๋ณ๋ก์ธ ๋จ์ ์ด ์๋ค..
์ฌ์ค ์์ ๋ฐฉ๋ฒ๋ค์ ๊ธ๋ฐฉ ์๊ฐ๋ฌ์ง๋ง ๋ค ๋ง์์ ๋ค์ง ์๋ ๋ฐฉ๋ฒ์ด์ฌ์ React-Hook-Form์ ๊ณต์๋ฌธ์์ ๋ค์ด๊ฐ์ ํด๊ฒฐ ๋ฐฉ์์ด ์๋์ง ์ฐพ์๋ณด๋ ์ค setValue๋ผ๋ ํจ์๋ฅผ ์ฐพ์๋ค!
4. React-Hook-Form์ setValue ํจ์ ์ฌ์ฉํ๊ธฐ
์ฌ์ฉ๋ฐฉ๋ฒ์ ํฌ๊ฒ ์ด๋ ต์ง ์์ ๊ฒ ๊ฐ๋ค!
setValue(name, value, options)
name: ์ด๋ฆ์ ๋จ์ผ ํ๋๋ก ํ๊ฒํ
ํ๋ค.(register ํจ์์ name์ ์ ์ด์ฃผ๋ฉด ๋๋ค.)
value: ํ๋์ ๊ฐ, name value์ ๋ฃ๊ณ ์ถ์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.(ํ์)
options: options์ ์ฌ๋ฌ ๊ธฐ๋ฅ๋ค๋ ์์ง๋ง ๋๋ ์ง๊ธ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
function EditToDoModal({showModal,handleClose,}: ModalProps) {
const {
register,
formState: { isValid, isSubmitting },
setError,
handleSubmit,
setValue,
} = useForm<FormValues>();
<form onSubmit={handleSubmit(handleValidSubmit)}>
<div>
<Dropdown
usage="state"
data={columns}
initialData={{ title: currentState?.title, id: currentState?.id }}
register={register('columnId')}
setValue={setValue}
/>
<Dropdown
usage="manager"
data={members}
initialData={{
nickname: assignee?.nickname,
profileImageUrl: assignee?.profileImageUrl || '',
id: assignee?.id,
}}
register={register('assigneeUserId')}
setValue={setValue}
/>
</div>
<div>
<ModalButton onClick={handleClose}>์ทจ์</ModalButton>
<ModalButton type="submit" disabled={!isValid || isSubmitting}>
์์
</ModalButton>
</div>
</form>
}
const handleItemClick = (data: EditTodoFormData): void => {
setIsSelectData({
isClick: true,
id: data.id,
title: data.title,
nickname: data.nickname,
profileImageUrl: data.profileImageUrl,
});
setValue(register.name, data.id);
};
<input type="hidden" {...register} />

์ด์ ๋ form ์ ์ถํ๋ฉด value ๊ฐ์ด ์ ์์ ์ผ๋ก ๋๊ธฐํ๋๋ค๐๐๐