[React 24] - useApolloClient,React-Hook-Form, Yup, Common-Component

yiwoojungยท2022๋…„ 9์›” 6์ผ
0

{C} Codecamp FE 06

๋ชฉ๋ก ๋ณด๊ธฐ
21/21
post-thumbnail

๐Ÿ‘พ ์˜ค๋Š˜์˜ ๋ชฉํ‘œ

  1. useApolloClient
  2. React-Hook-Form
  3. ๊ฒ€์ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Yup
  4. ์žฌ์‚ฌ์šฉ ์œ„ํ•œ ๊ณตํ†ต์ปดํฌ๋„ŒํŠธ Common-Component

1. useApolloClient

ApolloClient๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ฟผ๋ฆฌ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

  • useQuery - ํ™”๋ฉด์ด ๊ทธ๋ ค์งˆ ๋•Œ ์ž๋™์œผ๋กœ ์š”์ฒญ, ์ž๋™์œผ๋กœ ์‹คํ–‰.
  • useLazyQuery - ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ˆ˜๋™์œผ๋กœ ๋ฐ์ดํ„ฐ ์š”์ฒญ, ์ž๋™์œผ๋กœ ์‹คํ–‰.
  • useApolloClient - useQuery๋ฅผ axios์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•. ์ˆ˜๋™์œผ๋กœ ๋ฐ์ดํ„ฐ ์š”์ฒญ, ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰.

2. React-Hook-Form

์ž‘์„ฑ ํ˜•์‹์„ ๋œปํ•˜๋Š” form ํƒœ๊ทธ ์•ˆ์—์„œ

  • form ํƒœ๊ทธ์— onSubmit์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ž‘์„ฑ๋œ ๋‚ด์šฉ์„ ๋ฐฑ์—”๋“œ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฒ„ํŠผ์˜ ํƒ€์ž…์„ reset์œผ๋กœ ์ฃผ๋ฉด ํผ์•ˆ์˜ input๋“ค์ด ๋ชจ๋‘ ์ดˆ๊ธฐํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‚˜๋งŒ์˜ ๋ฒ„ํŠผ์„ ๋งŒ๋“ ๋‹ค๋ฉด type="button"์„ ๊ผญ ์ ์–ด์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด form์˜ default ๊ฐ’์ธ type="submit"์ด ์ ์šฉ๋ผ์„œ ๋ฒ„ํŠผ์ด ๋ฌด์กฐ๊ฑด ์‹คํ–‰๋˜๊ฒŒ ๋œ๋‹ค.

form์˜ ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š”๋ฐ ๋Œ€ํ‘œ์ ์œผ๋กœ formik, react-hook-form, react-form, redux-form ๋“ฑ์ด ์žˆ๋‹ค.
์ด ์ค‘์—์„œ react-hook-form์„ ์‚ฌ์šฉํ•ด๋ณผ๊ฑด๋ฐ ์ด๊ฒƒ์€ classํ˜•์—์„œ๋Š” ์‚ฌ์šฉ์ด ์–ด๋ ต๊ณ  ํ•จ์ˆ˜ํ˜•์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

React-Hook-Form์˜ ์žฅ์  ๋ฐ ํŠน์ง•

react-hook-form์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด์— setState๋ฅผ ์ด์šฉํ•ด์„œ input ๊ฐ’์„ ๋ฐ›์•„์˜ฌ ๋•Œ ๋งค๋ฒˆ ๋น„ํšจ์œจ์ ์œผ๋กœ ๋ฆฌ๋žœ๋”๊ฐ€ ์ผ์–ด๋‚ฌ๋˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. (์ƒ๋‹จ์˜ ๋ Œ๋” ์นด์šดํŠธ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.)
์ด๋Š” ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ์˜ ํŠน์ง•์„ ์ด์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.
๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋Š” input์— ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ state์— ๋”ฐ๋กœ ๋ณด๊ด€ํ•˜์ง€ ์•Š๊ณ  ๋‚˜์ค‘์— input๊ฐ’์„ ๋”ฐ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งํ•œ๋‹ค.
๋ฐ˜๋ฉด์— ์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋Š” ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋งˆ๋‹ค state์— ์ €์žฅํ•ด์„œ state์™€ input๊ฐ’์ด 100% ์ผ์น˜ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋‹ค๋ฅธ ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ์˜ ํ˜•์‹์„ ๋„๊ณ  ์žˆ์–ด์„œ ์†๋„๊ฐ€ ๋Š๋ฆฌ์ง€๋งŒ react-hook-form์€ ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ์˜ ํ˜•์‹์ด์–ด์„œ ๋ฆฌ๋ Œ๋”๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š์•„์„œ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๋‹ค.
(ํ•˜์ง€๋งŒ ์ •๋ง ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋“ค์— ์žˆ์–ด์„œ๋Š” ์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.)

React-Hook-Form ์‚ฌ์šฉํ•˜๊ธฐ

  • register : onChange ๊ฐ™์€ ์†์„ฑ๋“ค์ด ๋“ค์–ด๊ฐ€ ์žˆ์Œ
  • handleSubmit : ์ž…๋ ฅํ•œ state๋“ค์˜ ๋‚ด์šฉ๋“ค์„ ํ•จ์ˆ˜ ์•ˆ์œผ๋กœ ๋„ฃ์–ด์ค€๋‹ค.

3. ๊ฒ€์ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Yup

React-hook-form ๊ณผ Yup ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ Docs

์ด๋ ‡๊ฒŒ ๋งŒ๋“  yup์˜ schema๋ฅผ resolver๋ฅผ ํ†ตํ•ด์„œ react-hook-form๊ณผ ์—ฐ๊ฒฐํ•ด์ฃผ์—ˆ๋‹ค.

์—๋Ÿฌ๊ฐ€ ์žˆ์„ ๋•Œ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅด ๋ณด์—ฌ์ฃผ๋Š” ๋ถ€๋ถ„์€ formState์˜ errors๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

์—๋Ÿฌ๊ฐ€ ์—†๊ณ  ๋ชจ๋‘ ๋‹ค ์ž˜ ์ž…๋ ฅ์ด ๋˜์—ˆ๋‹ค๋ฉด formState์˜ isValid๊ฐ€ true๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค.

๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ์•ˆ ๋ˆŒ๋Ÿฌ๋„ ๋ฐ”๋กœ ํ•œ๋ฒˆ ์‹คํ–‰ ๋˜๊ฒŒ๋” ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ชจ๋“œ(mode)๋ฅผ onChange๋กœ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


Yup docs๋ฅผ ๋ณด๋ฉด yup์— ๊ธฐ๋ณธ validation ์กฐ๊ฑด ๋ง๊ณ  ๋‹ค๋ฅธ ์กฐ๊ฑด์„ ์ฃผ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.



4. ์žฌ์‚ฌ์šฉ ์œ„ํ•œ ๊ณตํ†ต์ปดํฌ๋„ŒํŠธ Common-Component

import ํ•˜๋Š” ๋ถ€๋ถ„

๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€