ApolloClient๋ฅผ ์ฌ์ฉํ ๋ ์ฌ๋ฌ๊ฐ์ง ์ฟผ๋ฆฌ ๋ฐฉ์์ด ์๋ค.
์์ฑ ํ์์ ๋ปํ๋ form ํ๊ทธ ์์์
type="button"
์ ๊ผญ ์ ์ด์ค์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด form์ default ๊ฐ์ธ type="submit"์ด ์ ์ฉ๋ผ์ ๋ฒํผ์ด ๋ฌด์กฐ๊ฑด ์คํ๋๊ฒ ๋๋ค. form์ ์ด๋ฌํ ํน์ง์ ์๋ํํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ฐ ๋ํ์ ์ผ๋ก formik, react-hook-form, react-form, redux-form ๋ฑ์ด ์๋ค.
์ด ์ค์์ react-hook-form์ ์ฌ์ฉํด๋ณผ๊ฑด๋ฐ ์ด๊ฒ์ classํ์์๋ ์ฌ์ฉ์ด ์ด๋ ต๊ณ ํจ์ํ์์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
react-hook-form์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด์ setState๋ฅผ ์ด์ฉํด์ input ๊ฐ์ ๋ฐ์์ฌ ๋ ๋งค๋ฒ ๋นํจ์จ์ ์ผ๋ก ๋ฆฌ๋๋๊ฐ ์ผ์ด๋ฌ๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ ์ ์๋ค. (์๋จ์ ๋ ๋ ์นด์ดํธ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ค.)
์ด๋ ๋น์ ์ด ์ปดํฌ๋ํธ์ ํน์ง์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
๋น์ ์ด ์ปดํฌ๋ํธ๋ input์ ์์ฑํ๋ค๊ณ ํ๋๋ผ๋ state์ ๋ฐ๋ก ๋ณด๊ดํ์ง ์๊ณ ๋์ค์ input๊ฐ์ ๋ฐ๋ก ๊ฐ์ ธ์ค๋ ์ปดํฌ๋ํธ๋ฅผ ๋งํ๋ค.
๋ฐ๋ฉด์ ์ ์ด ์ปดํฌ๋ํธ๋ ์์ฑํ๋ ๊ฒ๋ง๋ค state์ ์ ์ฅํด์ state์ input๊ฐ์ด 100% ์ผ์นํ๋ ์ปดํฌ๋ํธ์ด๋ค.
์ผ๋ฐ์ ์ธ ๋ค๋ฅธ ํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ ์ด ์ปดํฌ๋ํธ์ ํ์์ ๋๊ณ ์์ด์ ์๋๊ฐ ๋๋ฆฌ์ง๋ง react-hook-form์ ๋น์ ์ด ์ปดํฌ๋ํธ์ ํ์์ด์ด์ ๋ฆฌ๋ ๋๊ฐ ์ผ์ด๋์ง ์์์ ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ๋ ์๋ค.
(ํ์ง๋ง ์ ๋ง ์ค์ํ ๋ฐ์ดํฐ๋ค์ ์์ด์๋ ์ ์ด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.)
React-hook-form ๊ณผ Yup ๊ฐ์ด ์ฌ์ฉํ๊ธฐ ์ํ Docs
์ด๋ ๊ฒ ๋ง๋ yup์ schema๋ฅผ resolver๋ฅผ ํตํด์ react-hook-form๊ณผ ์ฐ๊ฒฐํด์ฃผ์๋ค.
์๋ฌ๊ฐ ์์ ๋ ์๋ฌ ๋ฉ์ธ์ง๋ฅด ๋ณด์ฌ์ฃผ๋ ๋ถ๋ถ์ formState์ errors๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
์๋ฌ๊ฐ ์๊ณ ๋ชจ๋ ๋ค ์ ์ ๋ ฅ์ด ๋์๋ค๋ฉด formState์ isValid๊ฐ true๋ก ๋ค์ด์ค๊ฒ ๋๋ค.
๋ก๊ทธ์ธ ๋ฒํผ์ ์ ๋๋ฌ๋ ๋ฐ๋ก ํ๋ฒ ์คํ ๋๊ฒ๋ ํ๊ณ ์ถ๋ค๋ฉด ๋ชจ๋(mode)๋ฅผ onChange๋ก ํด์ฃผ๋ฉด ๋๋ค.
Yup docs๋ฅผ ๋ณด๋ฉด yup์ ๊ธฐ๋ณธ validation ์กฐ๊ฑด ๋ง๊ณ ๋ค๋ฅธ ์กฐ๊ฑด์ ์ฃผ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
import ํ๋ ๋ถ๋ถ
๊ณตํต ์ปดํฌ๋ํธ