๋ชฉ์ฐจ

๐ก TIL 20231019 - React-hook-form ๋ณต์ต - register, validate, errors, handleSubmit
React-hook-form
- import useForm
- ์ปดํฌ๋ํธ์์ useForm์ ํธ์ถํ๋ฉด register์ handleSubmit์ ์ฌ์ฉํ ์ ์๋ค.
- form ๋ด์ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํ์ํ input๋ค์ register ํจ์๋ฅผ ํธ์ถํ๋ค.
- required, minLength/maxLength, pattern, validate ๋ฑ
๐ญ Register ํจ์
<input
{...register("email", {
required: "์ด๋ฉ์ผ์ ํ์ ์
๋ ฅ์ฌํญ ์
๋๋ค.",
pattern: {
value: /^[A-Za-z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/,
message: "์ฌ๋ฐ๋ฅธ ์ด๋ฉ์ผ ํ์์ด ์๋๋๋ค.",
},
})}
placeholder="Email"
/>;
- useForm hook์ผ๋ก ๋ถ๋ฌ์ฌ ์ ์์
- ๊ฒ์ฌ๊ฐ ํ์ํ input์์ register ํจ์๋ฅผ ํธ์ถ
- react-hook-form์ด ์ ์ ์๋๋ก input์ ์ด๋ฆ์ ๋ถ์ฌํด์ผ ํจ
- {...register("email")
๐ญ Validate ํจ์
- react-hook-form์์ ๋ฌธ์์ด์ ๋ฆฌํดํ๋ ๊ฒ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฆฌํดํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
- ex) validate: (value) => value.includes("babo") ? "babo๋ ์ด๋ฆ์ ํฌํจ๋ ์ ์์ต๋๋ค." : true
- validate๋ ํ๋์ ํจ์ ๋๋ ์ฌ๋ฌ ํจ์๊ฐ ์๋ ๊ฐ์ฒด๊ฐ ๋ ์ ์์
- input์ ์ฌ๋ฌ ๊ฐ์ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํ์ํ ์ ์๊ธฐ ๋๋ฌธ
validate: {
noBabo: (value) => value.includes("babo") ? "babo๋ ์ด๋ฆ์ ํฌํจ๋ ์ ์์ต๋๋ค." : true,
noMelong: (value) => value.includes("melong") ? "melong์ ์ด๋ฆ์ ํฌํจ๋ ์ ์์ต๋๋ค." : true,
}
- validate ํจ์๋ฅผ ๋น๋๊ธฐ ํจ์(async/await)๋ก ์์ฑํ๋ฉด ์๋ฒ์ ํ์ธ ํ ์๋ต์ ๋ฐ์์ ๋ฆฌํดํ ์๋ ์๋ค.
๐ญ errors ๊ฐ์ฒด
- ์ค์ ํ ๊ท์น๊ณผ ๋ฉ์์ง์ ๋ฐ๋ผ ์์์ ์ฑ์์ง๊ธฐ ๋๋ฌธ์ ์์ ํ๊ธฐ ๊ฐํธํ๋ค.
- errors ๊ฐ์ฒด๋ formState ๋ด๋ถ์ ์กด์ฌ
- <span>{errors?.email?.message}</span>
๐ญ handleSubmit
- ๋ชจ๋ validation์ useForm์์ ๋ถ๋ฌ์จ handleSubmit ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ํ๋๋ค.
- handleSubmit ํจ์๋ onSubmit ์ด๋ฒคํธ์ ๋ฑ๋กํด์ผ ํ๋ค.
- onSubmit ์ด๋ฒคํธ๋ ์ธ์๋ก onValid ํจ์ 1๊ฐ๋ง ๋ฐ๋๋ค.
- onValid ํจ์๋ form ๋ฐ์ดํฐ๊ฐ ์ ํจํ ๋๋ง ํธ์ถ๋๋ค.
๐ญ ๊ทธ ์ธ
- defaultValues: input์ ๊ธฐ๋ณธ๊ฐ ์ค์
- setErrors: ์ฝ๋์์ ์๋ฌ๋ฅผ ๋ฐ์์ํฌ ๋ ์ฌ์ฉ
- shouldFocus: ์ฌ์ฉ์๊ฐ form์ submitํ ๋ ์๋ฌ๊ฐ ์กด์ฌํ๋ฉด ํด๋น input์ ์ปค์๋ฅผ ์๋์ผ๋ก focusํด์ค
'โ๏ธ What I Learned > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] ๋น๋๊ธฐ ์ฝ๋, ์ฝ๋ฐฑํจ์, ํ๋ก๋ฏธ์ค, ์ค๋ฅ์ฒ๋ฆฌ, async/await (0) | 2024.01.26 |
---|---|
[TIL] Recoil Selector (0) | 2023.10.29 |
[TIL] ๋น๋๊ธฐ ํจ์๋ก๋ถํฐ ๋ฐ์์ค๋ data์ ์ ๋ค๋ฆญ ์ฌ์ฉํ๊ธฐ (0) | 2023.09.14 |
[TIL] HTTP ์ํ ์ฝ๋ (0) | 2023.09.12 |
[TIL] JavaScript ๋๊ธฐ, ๋น๋๊ธฐ, ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํ์์ฑ (0) | 2023.09.09 |

๐ก TIL 20231019 - React-hook-form ๋ณต์ต - register, validate, errors, handleSubmit
React-hook-form
- import useForm
- ์ปดํฌ๋ํธ์์ useForm์ ํธ์ถํ๋ฉด register์ handleSubmit์ ์ฌ์ฉํ ์ ์๋ค.
- form ๋ด์ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํ์ํ input๋ค์ register ํจ์๋ฅผ ํธ์ถํ๋ค.
- required, minLength/maxLength, pattern, validate ๋ฑ
๐ญ Register ํจ์
<input
{...register("email", {
required: "์ด๋ฉ์ผ์ ํ์ ์
๋ ฅ์ฌํญ ์
๋๋ค.",
pattern: {
value: /^[A-Za-z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/,
message: "์ฌ๋ฐ๋ฅธ ์ด๋ฉ์ผ ํ์์ด ์๋๋๋ค.",
},
})}
placeholder="Email"
/>;
- useForm hook์ผ๋ก ๋ถ๋ฌ์ฌ ์ ์์
- ๊ฒ์ฌ๊ฐ ํ์ํ input์์ register ํจ์๋ฅผ ํธ์ถ
- react-hook-form์ด ์ ์ ์๋๋ก input์ ์ด๋ฆ์ ๋ถ์ฌํด์ผ ํจ
- {...register("email")
๐ญ Validate ํจ์
- react-hook-form์์ ๋ฌธ์์ด์ ๋ฆฌํดํ๋ ๊ฒ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฆฌํดํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
- ex) validate: (value) => value.includes("babo") ? "babo๋ ์ด๋ฆ์ ํฌํจ๋ ์ ์์ต๋๋ค." : true
- validate๋ ํ๋์ ํจ์ ๋๋ ์ฌ๋ฌ ํจ์๊ฐ ์๋ ๊ฐ์ฒด๊ฐ ๋ ์ ์์
- input์ ์ฌ๋ฌ ๊ฐ์ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํ์ํ ์ ์๊ธฐ ๋๋ฌธ
validate: {
noBabo: (value) => value.includes("babo") ? "babo๋ ์ด๋ฆ์ ํฌํจ๋ ์ ์์ต๋๋ค." : true,
noMelong: (value) => value.includes("melong") ? "melong์ ์ด๋ฆ์ ํฌํจ๋ ์ ์์ต๋๋ค." : true,
}
- validate ํจ์๋ฅผ ๋น๋๊ธฐ ํจ์(async/await)๋ก ์์ฑํ๋ฉด ์๋ฒ์ ํ์ธ ํ ์๋ต์ ๋ฐ์์ ๋ฆฌํดํ ์๋ ์๋ค.
๐ญ errors ๊ฐ์ฒด
- ์ค์ ํ ๊ท์น๊ณผ ๋ฉ์์ง์ ๋ฐ๋ผ ์์์ ์ฑ์์ง๊ธฐ ๋๋ฌธ์ ์์ ํ๊ธฐ ๊ฐํธํ๋ค.
- errors ๊ฐ์ฒด๋ formState ๋ด๋ถ์ ์กด์ฌ
- <span>{errors?.email?.message}</span>
๐ญ handleSubmit
- ๋ชจ๋ validation์ useForm์์ ๋ถ๋ฌ์จ handleSubmit ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ํ๋๋ค.
- handleSubmit ํจ์๋ onSubmit ์ด๋ฒคํธ์ ๋ฑ๋กํด์ผ ํ๋ค.
- onSubmit ์ด๋ฒคํธ๋ ์ธ์๋ก onValid ํจ์ 1๊ฐ๋ง ๋ฐ๋๋ค.
- onValid ํจ์๋ form ๋ฐ์ดํฐ๊ฐ ์ ํจํ ๋๋ง ํธ์ถ๋๋ค.
๐ญ ๊ทธ ์ธ
- defaultValues: input์ ๊ธฐ๋ณธ๊ฐ ์ค์
- setErrors: ์ฝ๋์์ ์๋ฌ๋ฅผ ๋ฐ์์ํฌ ๋ ์ฌ์ฉ
- shouldFocus: ์ฌ์ฉ์๊ฐ form์ submitํ ๋ ์๋ฌ๊ฐ ์กด์ฌํ๋ฉด ํด๋น input์ ์ปค์๋ฅผ ์๋์ผ๋ก focusํด์ค
'โ๏ธ What I Learned > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] ๋น๋๊ธฐ ์ฝ๋, ์ฝ๋ฐฑํจ์, ํ๋ก๋ฏธ์ค, ์ค๋ฅ์ฒ๋ฆฌ, async/await (0) | 2024.01.26 |
---|---|
[TIL] Recoil Selector (0) | 2023.10.29 |
[TIL] ๋น๋๊ธฐ ํจ์๋ก๋ถํฐ ๋ฐ์์ค๋ data์ ์ ๋ค๋ฆญ ์ฌ์ฉํ๊ธฐ (0) | 2023.09.14 |
[TIL] HTTP ์ํ ์ฝ๋ (0) | 2023.09.12 |
[TIL] JavaScript ๋๊ธฐ, ๋น๋๊ธฐ, ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํ์์ฑ (0) | 2023.09.09 |