[React 02] - React, Component, useState

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

{C} Codecamp FE 06

๋ชฉ๋ก ๋ณด๊ธฐ
2/21

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

  1. ์™œ React ์ธ๊ฐ€?
  2. Component
  3. state, useState
  4. useState๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ ํšŒ์›๊ฐ€์ž… ์ฐฝ ๋งŒ๋“ค๊ธฐ

1. ์™œ React ์ธ๊ฐ€?

๋ฆฌ์•กํŠธ ๋ง๊ณ ๋„ ๋‹ค๋ฅธ ๋„๊ตฌ๋“ค์ด ๋งŽ์ด ์žˆ๋‹ค.
์ˆœ์ˆ˜ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ ์“ฐ๋‹ค๊ฐ€ ๊ทธ๊ฒƒ์„ ํšจ์œจ์ ์œผ๋กœ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ธ jQuery๊ฐ€ ๋‚˜์™”๋‹ค. ํ•˜์ง€๋งŒ ์ œ์ด์ฟผ๋ฆฌ ๋˜ํ•œ ์„ฑ๋Šฅ์ด ๋Š๋ฆฌ๊ณ  ๋น„ํšจ์œจ์ ์ธ ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•„์„œ Vue, React, Angular ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ๋‹ค.
๊ทธ๋ ‡์ง€๋งŒ ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค ์ค‘์—์„œ๋„ ์™œ ๋ฆฌ์•กํŠธ๋ฅผ ์“ธ๊นŒ?

์šฐ์„  ์ด์šฉ์ž๊ฐ€ ๊ฐ€์žฅ ๋งŽ๋‹ค.
๋‹ค์Œ์€ npmtrends ์—์„œ ์ด์šฉ์ž๋ฅผ ๋น„๊ตํ•ด๋†“์€ ๊ทธ๋ž˜ํ”„์ด๋‹ค.

๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ ์ด์šฉ์ž ์ˆ˜๊ฐ€ 8๋ฐฐ ์ •๋„๊ฐ€ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ด์šฉ์ž๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ž˜ ํ˜•์„ฑ๋˜์–ด์žˆ์–ด์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ํ•ด๊ฒฐํ•˜๊ธฐ๋„ ์‰ฝ๋‹ค.

์„ธ๋ฒˆ์งธ ์žฅ์ ์€ ๋ฆฌ์•กํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ์›น, ์•ฑ(์•ˆ๋“œ๋กœ์ด๋“œ, IOS), pc์•ฑ๊นŒ์ง€ 4๊ฐ€์ง€์˜ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.
React-Native๋ผ๋Š” ๋ชจ๋ฐ”์ผ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋Š”๋ฐ ์ด๋Š” ๋ฆฌ์•กํŠธ์™€ 6-70%๊ฐ€ ๋น„์Šทํ•  ์ •๋„๋กœ ๊ณตํ†ต์ ์ด ๋งŽ๋‹ค. ๋˜ํ•œ React-Native๋Š” ํฌ๋กœ์Šคํ”Œ๋žซํผ์œผ๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ, ios ๋‘ ๊ฐœ์˜ ์„œ๋น„์Šค๊ฐ€ ๋ชจ๋‘ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ํฐ ์žฅ์ ์ด ์žˆ๋‹ค.
์—ฌ๊ธฐ์— Electron์„ ์ข€๋งŒ ๋” ๋ฐฐ์›Œ์„œ React์™€ ๊ฐ™์ด ์ด์šฉํ•œ๋‹ค๋ฉด ๋…ธํŠธ๋ถ์—์„œ ์‚ฌ์šฉํ•˜๋Š” pc์•ฑ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.์—ฌ๊ธฐ์„œ๋„ ์ฃผ๋Š” React์ด๋‹ค.


2. Component

๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ์กด์˜ ์ œ์ด์ฟผ๋ฆฌ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ผ์„ ๋•Œ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์™œ ๋ฆฌ์•กํŠธ, ์—ฅ๊ทค๋Ÿฌ, ๋ทฐ์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์œ ๋ช…ํ•ด์ง„๊ฑธ๊นŒ?

์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋ฆฐ๋‹ค๊ณ  ํ•˜๋ฉด ์ „์ฒด์˜ ๊ทธ๋ฆผ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ•˜๋‚˜ ํ•˜๋‚˜ ๋‹ค ๊ทธ๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ, ์—ฅ๊ทค๋Ÿฌ, ๋ทฐ๋Š” ํฐ ๋„ํ™”์ง€์— ๊ฐ๊ฐ์˜ ๋ถ€ํ’ˆ์„ ๊ฐ€์ ธ์™€์„œ ์กฐ๋ฆฝํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.์ด๋ ‡๊ฒŒ ๋ถ€ํ’ˆ์ด ๋”ฐ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์œผ๋ฉด ๋‹ค๋ฅธ ๋„ํ™”์ง€์—์„œ๋„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด Component๋ž€ ๋ฌด์—‡์ผ๊นŒ?

Component

์ปดํฌ๋„ŒํŠธ๋ž€ UI ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋ถ€ํ’ˆํ™”ํ•ด์„œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜๋‚˜์˜ ๋ถ€ํ’ˆ๋“ค์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ์ด๊ฒƒ๋“ค์„ importํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๊ต‰์žฅํžˆ ํšจ์œจ์ ์œผ๋กœ ๋ณ€ํ–ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ณต๋ถ™๊ณผ๋Š” ์›๋ฆฌ๊ฐ€ ๋‹ค๋ฅด๋‹ค.
๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ–ˆ๋‹ค๋ฉด ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๋‹ค ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ํ•˜๋‚˜์˜ ์›๋ณธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๊ฒƒ์„ import ํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋ฏ€๋กœ ์›๋ณธ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋ชจ๋‘ ๋‹ค ๋ณ€๊ฒฝ๋˜์–ด ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋“ค๋„ ๊ฐ™์ด import ๋˜๋Š” ๊ฒƒ์ธ๊ฐ€?
๊ทธ๊ฑด ์•„๋‹ˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ™์ด import ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” UI์˜ ์žฌ์‚ฌ์šฉ์„ ์˜๋ฏธํ•œ๋‹ค.

ํŽ˜์ด์ง€๋„ ํ•˜๋‚˜์˜ ํฐ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
์ปดํฌ๋„ŒํŠธ๋ผ๋Š” ๊ฒƒ์€ ์‚ฌ๋žŒ์ด ๋งŒ๋“ค๊ธฐ์— ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์„ ๋ฐฐ์›Œ๋ณด์ž.


ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ VS ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ

์ปดํฌ๋„ŒํŠธ๋Š” ํด๋ž˜์Šคํ˜•๊ณผ ํ•จ์ˆ˜ํ˜• ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

์œ„์˜ ํด๋ž˜์Šคํ˜•๊ณผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์ด ๋‘๊ฐœ์˜ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋น„๊ตํ•ด๋ณด์ž.
ํ•จ์ˆ˜ํ˜•์ด ์†Œ์Šค์ฝ”๋“œ ๊ธธ์ด๊ฐ€ ํ›จ์”ฌ ์งง๋‹ค. ๊ทธ๋ž˜์„œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋˜์—ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์‹ฌ์ง€์–ด ์ด ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๊ธธ์ด๊ฐ€ ํ›จ์”ฌ ์งง์•„์ง„๋‹ค.

์ด์ œ ๋ฆฌ์•กํŠธ ์ž์ฒด์—์„œ๋„ ํด๋ž˜์Šคํ˜•์„ ๋” ์ด์ƒ ์—…๋ฐ์ดํŠธ ํ•˜์ง€ ์•Š๊ฒ ๋‹ค๊ณ  ํ•œ๋‹ค. ํ•จ์ˆ˜ํ˜•์—์„œ ์ง€์›ํ–ˆ๋˜ ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ์ ์  ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ์˜ˆ์ „๋ถ€ํ„ฐ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์˜จ ํšŒ์‚ฌ๋“ค ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ํด๋ž˜์Šคํ˜•์„ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ํ•œ๋ฒˆ์— ๋ฐ”๊พธ๊ธฐ๋Š” ์–ด๋ ค์šธ ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ ํด๋ž˜์Šคํ˜•๊ณผ ํ•จ์ˆ˜ํ˜•, ๋‘๊ฐœ๊ฐ€ ๊ณต์กด์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋„ ์•Œ์•„์•ผํ•œ๋‹ค. ํŠนํžˆ ํด๋ž˜์Šคํ˜•์—์„œ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์„ ๊ณต๋ถ€ํ•ด๋ณด๋ฉด ์ข‹๋‹ค.

ํด๋ž˜์Šคํ˜•์€ ๊ธธ๊ณ  ๋ณต์žกํ•œ๋ฐ ๊ทธ๋Ÿผ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•จ์ˆ˜ํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์•˜์„ํ…๋ฐ ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ผ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง„ ๊ฒƒ์€ ๋ฐ”๋กœ React-hooks๋“ค ๋•๋ถ„์ด๋‹ค. ์ด๋“ค์ด ๋‚˜์˜ค๊ณ  ๋‚˜์„œ๋ถ€ํ„ฐ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.


React-Hooks๋ž€?

  • use๋กœ ์‹œ์ž‘ํ•˜๋Š” ์• ๋“ค
  • useState, useEffect, useCallback ๋“ฑ...

๊ทธ์ค‘์—์„œ useState๋ฅผ ๋จผ์ € ๋ฐฐ์›Œ๋ณด์ž.

3. state, useState

  • state -> ์ปดํฌ๋„ŒํŠธ ์ „์šฉ ๋ณ€์ˆ˜
    ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” let, const ๋Œ€์‹  state๋ฅผ ์‚ฌ์šฉํ•จ
  • useState -> state ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์• 

useState๋กœ state๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž

const [state, setState] = useState('์ฒ ์ˆ˜')
const [๋ณ€์ˆ˜๋ช…, ๋ณ€์ˆ˜๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜] = useState(์ดˆ๊ธฐ๊ฐ’)

์˜ˆ๋ฅผ๋“ค์–ด ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

const [count, setCount] = useState(0)

๋ณ€์ˆ˜๋ช…, ๋ณ€์ˆ˜๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜๋Š” ์šฐ๋ฆฌ ๋งˆ์Œ๋Œ€๋กœ ์ด๋ฆ„์„ ์ง€์„ ์ˆ˜ ์žˆ๋‹ค.
์—ฌ๊ธฐ์„œ setCount(5)๋ฅผ ํ•˜๋ฉด count๊ฐ€ 5๊ฐ€ ๋œ๋‹ค.


โ“ ๊ทธ๋Ÿฐ๋ฐ ์™œ state๋ฅผ ์“ฐ๋Š” ๊ฑธ๊นŒ?

let ์ด๋‚˜ const๋Š” ๋ชป์“ฐ๋Š” ๊ฑธ๊นŒ?


์œ„๋Š” ๊ธฐ์กด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹๊ณผ React์˜ State ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•œ ์นด์šดํŠธ ์—… ํŽ˜์ด์ง€์ด๋‹ค.

๋ฆฌ์•กํŠธ ํ›…์ธ useState๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ์งง๊ณ  ๊ฐ„๋‹จํ•ด์ง„๋‹ค.

๋ณ€์ˆ˜๋„ {์ค‘๊ด„ํ˜ธ} ์•ˆ์— ์ ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ณ  ๋ณ€ํ™”๋œ ๊ฐ’์ด ํ™”๋ฉด์— ๋ฐ”๋กœ ๋ฐ˜์˜๋œ๋‹ค.




useState๋ฅผ ์“ฐ๋ฉด์„œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ !

- let์ด ํ™”๋ฉด์— ๋ฐ˜์˜ ์•ˆ๋˜๋Š” ์‚ฌ๋ก€

react์˜ ์ž‘๋™์›๋ฆฌ ๋•Œ๋ฌธ์— let ์€ ํ™”๋ฉด์— ๋ฐ˜์˜์ด ๋˜์ง€ ์•Š์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ react๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด useState๋ฅผ ํ•„์ˆ˜๋กœ ์•Œ์•„์•ผํ•œ๋‹ค.

- ์Šค์ฝ”ํ”„์ฒด์ธ ์‚ฌ๋ก€

apple์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ apple์„ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ์ค‘๊ด„ํ˜ธ ์ค‘์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์• ๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด๋•Œ ์ด ํ•จ์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์Šค์ฝ”ํ”„ (scope) ๋ผ๊ณ  ํ•˜๊ณ  ๋ณ€์ˆ˜(apple)๋ฅผ ์•ˆ์—์„œ ๋ฐ–์œผ๋กœ ์•Œ์•„๊ฐ€๋Š” ๊ณผ์ •์ด ์ฒด์ธ์ฒ˜๋Ÿผ ์—ฎ์—ฌ ์žˆ๋‹ค๊ณ  ํ•ด์„œ ์Šค์ฝ”ํ”„์ฒด์ธ (scope chain)์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ฝ”๋“œ๋ฅผ ์ด๋ ‡๊ฒŒ ์ ๊ฒŒ ๋˜๋ฉด ์Šค์ฝ”ํ”„์ฒด์ธ์— ์˜ํ•ด์„œ count๊ฐ€ 10์ด ์•„๋‹Œ 0์ด ๋œ๋‹ค.

์ด์ œ ์ด๊ฒƒ๋“ค์„ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ ํšŒ์›๊ฐ€์ž… ์ฐฝ์„ ๋งŒ๋“ค์–ด๋ณด์ž.


4. useState๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ ํšŒ์›๊ฐ€์ž… ์ฐฝ ๋งŒ๋“ค๊ธฐ

- event.target์„ ์ด์šฉํ•˜๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š” ํƒœ๊ทธ ์ „์ฒด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
- event.target.value๋ฅผ ์ ์œผ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ด๊ฒƒ์„ ์‘์šฉํ•˜๋ฉด setEmail, setPassword ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์— ๋”ฐ๋ผ ์—๋Ÿฌ๋ฅผ ๋„์›Œ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ ์—๋Ÿฌ ๋‚ด์šฉ ๋˜ํ•œ useState๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
emailError๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์ž…๋ ฅ๋ฐ›์€ ์ด๋ฉ”์ผ์ด ์ด๋ฉ”์ผ ํ˜•์‹์ด ์•„๋‹ ๋•Œ ๋ณ€์ˆ˜๊ฐ’์„ ๋ฐ”๊ฟ”์ฃผ๋Š” ์กฐ๊ฑด์„ ์ฃผ๋ฉด ๋œ๋‹ค. (์ด๋ฉ”์ผ์ด ์•„๋‹Œ ๊ฒƒ์€ '@'๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์œผ๋กœ ์ผ๋‹จ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค.)
error ๋ฌธ๊ตฌ๋Š” ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ input ๋ฐ‘์— ๋œจ๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค.

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

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