Front-End/React

React] Hook : useState

์™•๊ฐ€๐Ÿ‘ 2023. 6. 6. 22:29
728x90
๋ฐ˜์‘ํ˜•

useState

Component๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ƒํƒœ๊ฐ’์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ์˜ ๋™์  ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

ํ”ํžˆ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด๋˜์ง€๋งŒ, ์•„๋ž˜์™€๊ฐ™์€ ํŠน์ง•์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜๋ž‘์€ ๋Š๋‚Œ๋งŒ ๊ฐ™์ง€ ๋งŽ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

const [๋ณ€์ˆ˜์ด๋ฆ„, set๋ณ€์ˆ˜์ด๋ฆ„] = useState(์ดˆ๊ธฐ๊ฐ’);

 

set๋ณ€์ˆ˜์ด๋ฆ„์€ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ๋„ฃ์–ด๋„ ๋˜๊ณ , ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜์— ๊ฐ’์„ ์ง์ ‘ ๋Œ€์ž…ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, set์„ ํ†ตํ•ด ๊ฐ’์„ ๋Œ€์ž…ํ•ด์ค๋‹ˆ๋‹ค.

 

  • state๊ฐ’์ด ๋ณ€ํ•˜๊ฒŒ ๋˜๋ฉด UI๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋œ๋‹ค.
  • useState๋Š” ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

 


 

 

์˜ˆ

 

inputํƒœ๊ทธ์˜ ๊ฐ’์„ ์ž…๋ ฅํ•ด ์ฃผ๋ฉด์„œ content๋ผ๋Š” state๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์„ฑํ•˜์˜€๋‹ค.

content์„ ์–ธํ•  ๋•Œ๋Š” "" ๋นˆ๋ฌธ์ž์—ด๋กœ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•ด ์ฃผ๊ณ ,

onChangeํ•จ์ˆ˜์˜ event๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜์—ฌ content๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•ด์ค๋‹ˆ๋‹ค.

 

 


 

 

๋ณ€์ˆ˜์™€ state์˜ ์ฐจ์ด

์ฒ˜์Œ React์™€ hook์„ ์ ‘ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ์™œ ๊ตณ์ด useState๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ๊ท€์ฐฎ์Œ์„ ๊ฐ์ˆ˜ํ•ด์•ผ ๋˜๋Š”์ง€ ํ•œ ๋ฒˆ์ฏค ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ €๋Š” ๊ทธ๋žฌ์Šต๋‹ˆ๋‹ค...)

 

๋ฐ”๋‹๋ผ JS๋‚˜ JQuery ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” DOM์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ value๋‚˜ text๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด์„œ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ,

๋ฆฌ์•กํŠธ์—์„œ๋Š” state๊ฐ’์„ setState๋กœ ์ž…๋ ฅํ•ด ์ฃผ๋ฉด์„œ ํ™”๋ฉด์„ ๋ฆฌ๋ Œ๋”๋ง ํ•˜๋ฉด์„œ ํ‘œํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๊ณ  ๋ฆฌ์•กํŠธ์—์„œ ์ผ๋ฐ˜์ ์ธ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค.

๋‹ค๋งŒ state๊ฐ’์ด ๋ณ€ํ•˜๊ฒŒ ๋˜๋ฉด ํ™”๋ฉด์ด ๋ฆฌ๋ Œ๋”๋ง ๋˜๋ฉด์„œ ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ฒŒ ๋˜๊ณ (๋ฆฌ์•กํŠธ์˜ ๊ธฐ๋ณธ ์›๋ฆฌ), ๋ณ€์ˆ˜๊ฐ€ ๊ณ„์† ์ดˆ๊ธฐํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ž˜ ์‚ฌ์šฉํ•ด์•ผ ๋œ๋‹ค.

 

 


 

 

์˜ˆ

 

์œ„ ์†Œ์Šค์— localValue๋ผ๋Š” letํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธฐ๊ฐ’์€ test๋กœ ํ•˜์˜€๊ณ , inputํƒœ๊ทธ์˜ onChangeํ•จ์ˆ˜๊ฐ€ ๋™์ž‘ํ•  ๋•Œ setState์™€ ๊ฐ™์ด ๊ฐ’์„ ๋„ฃ์–ด์คฌ์Šต๋‹ˆ๋‹ค.

state๋กœ ์„ ์–ธํ•œ content์™€๋Š” ๋‹ฌ๋ฆฌ ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š” ๊ฐ’์€ ๊ณ„์† test์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋‚ด์šฉ๊ณผ ๊ฐ™์ด state๊ฐ’์ด ๊ณ„์† ๋ฐ”๋€Œ๊ฒŒ ๋˜๋ฉด์„œ ํ™”๋ฉด์ด ๋ฆฌ๋ Œ๋”๋ง ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ,

๋ฆฌ๋ Œ๋”๋ง์ด ์ด๋Ÿด ๋‚  ๋•Œ๋งˆ๋‹ค Contentํ•จ์ˆ˜๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋˜๊ฒŒ ๋˜๊ณ ,

์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค localValue๊ฐ€ ์žฌ์ •์˜ ๋˜์–ด e.target.value๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฐ’์ด ์•„๋‹Œ let localValue = "test"๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๋ฉด์„œ

test๋กœ ์ •์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

(์ •ํ™•ํžˆ๋Š” ํ•œ ๊ธ€์ž ์ž…๋ ฅํ•  ๋•Œ localValue์˜ ๊ฐ’์€ ๋ณ€ํ•˜์ง€๋งŒ, ๋ฆฌ๋ Œ๋”๋ง ๋˜๋ฉด์„œ ์ดˆ๊ธฐํ™”๋จ)

 

 


 

 

useState๋Š” ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•œ๋‹ค.

์˜ˆ์‹œ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ์‹ค์ œ ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์ˆ˜๋งŽ์€ state๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด state๊ฐ’์ด ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ ๋งŽ์€ ๊ฐ’๋“ค์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€ํ•˜์—ฌ ๋™๊ธฐ๋กœ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋ฉด ์•„๋ฌด๋ฆฌ ๊ฐ€์ƒ DOM์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์„ฑ๋Šฅ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ๋น„๋™๊ธฐ๋กœ batch๋ฅผ ํ†ตํ•ด ๋™์ž‘ํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

 

์•„๋ž˜ ๊ฒŒ์‹œ๊ธ€์—์„œ ๊ฐ€์ƒ DOM๊ด€๋ จํ•ด์„œ react ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2023.06.04 - [Front-End/React] - React] React ๋ž€...?

 

 


 

 

์˜ˆ

 

๋งŽ์€ ๋ธ”๋กœ๊ทธ๋‚˜ ์ธํ„ฐ๋„ท์— ๋Œ์•„๋‹ค๋‹ˆ๋Š” counter๋ฅผ ์˜ˆ์‹œ๊ฐ€ ์žˆ์ง€๋งŒ, ๊ทธ๋ž˜๋„ ์กฐ๊ธˆ์€ ๋‹ค๋ฅด๊ฒŒ string์œผ๋กœ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

(ํฌ๊ฒŒ ๋‹ค๋ฅธ ๊ฑด ์—†์ง€๋งŒ...)

๋งˆ์ง€๋ง‰ ๊ธ€์ž์ธ "๋‹ค"๋งŒ ์ถ”๊ฐ€๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งจ ์œ„์—์„œ ์ ์—ˆ๋“ฏ์ด setState๋Š” ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— content์— ์ถ”๊ฐ€๋œ ๊ฐ’์„ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋งˆ์ง€๋ง‰ "๋‹ค" ๋ฌธ์ž๋งŒ ์‹คํ–‰๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 


 

 

ํ•ด๋‹น ๊ธ€์€ useState๋ฅผ ์„ค๋ช…ํ•˜๋ ค๊ณ  ์ž‘์„ฑํ•œ ๊ฒƒ์ด๊ณ , 
๋งˆ์ง€๋ง‰์— ๋‹ค๋ค˜๋˜ useState๊ฐ€ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌ๋œ ๊ฒƒ์„ ์ธ์ง€ํ•˜๊ณ ,
useState๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฑด ๋”ฐ๋กœ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ useEffect๋‚˜ ์ฝœ๋ฐฑํ•จ์ˆ˜ ํ™œ์šฉ...
728x90

'Front-End > React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

React] Hook : useEffect  (0) 2023.06.20
React] Hook  (0) 2023.06.20
React] Hook : props  (1) 2023.06.06
React] Import & export  (0) 2023.06.06
React] Component & JSX  (0) 2023.06.04