๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
WEB/REACT

๋ฆฌ์•กํŠธ์—์„œ setState๋ฅผ ํ†ตํ•ด์„œ state๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ์ด์œ  / setState์˜ ๋น„๋™๊ธฐ์„ฑ

by mingzoo 2022. 10. 21.

๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ฒ˜์Œ์—๋Š” ์—†๋˜ ์˜๋ฌธ์ด ๊ฐ‘์ž๊ธฐ ์ƒ๊ฒผ์—ˆ๋‹ค.

์™œ ๋ฆฌ์•กํŠธ๋Š” useState๋ผ๋Š” ํ›…์„ ์‚ฌ์šฉํ•ด์„œ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•˜๋Š”๊ฒƒ์ธ๊ฐ€

๋ฌผ๋ก  ํ›…์„ ์‚ฌ์šฉํ•ด์„œ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰์•„์ฃผ๊ณ , ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์‹œ์ ์— ์›ํ•˜๋Š” ๋™์ž‘์„ ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ผ ๊ฑฐ๋‹ค.

ํ•˜์ง€๋งŒ, ์™œ!! ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๋“ฏ์ด ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š”๊ฒƒ์ด๋ƒ ์ด๊ฒŒ ๋ฌธ๋“ ๊ถ๊ธˆํ•ด์กŒ๋‹ค

 

์ด์œ 

state๋Š” immutable(๋ถˆ๋ณ€์„ฑ)์„ ์œ ์ง€ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์ปดํฌ๋„ŒํŠธ๋Š” ํ˜„์žฌ์˜ this.state์™€ setState๋ฅผ ๋น„๊ตํ•ด์„œ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ render ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, state๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฆฌ์•กํŠธ๊ฐ€ render ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋„ ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. 

์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ถ”์ ํ•˜๊ณ  ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋ ค๋ฉด setState๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. setState๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— state๊ฐ€ ์ง์ ‘ ์ˆ˜์ •๋˜์–ด ์—ฌ๋Ÿฌ๋ฒˆ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ด์ „ ์—…๋ฐ์ดํŠธ ๋‚ด์šฉ์ด ๋‹ค์Œ ์—…๋ฐ์ดํŠธ ๋‚ด์šฉ์— ๋ฎ์–ด ์“ฐ์—ฌ์งˆ ์ˆ˜๊ฐ€ ์žˆ์–ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ณณ์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. PureComponent์—์„œ ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. PureComponent๋Š” this.state์™€ setState๋ฅผ ๋น„๊ตํ•ด ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ renderํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ์ค๋‹ˆ๋‹ค. ์ด๋•Œ, state๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ฒŒ๋˜๋ฉด ๊ธฐ์กด์˜ this.state์™€ setState๊ฐ€ ๋™์ผํ•˜๋ฏ€๋กœ ๋ฆฌ์•กํŠธ๋Š” renderํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก , state๋Š” ๊ผญ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ๋ง์ž!

 

๐Ÿค” ์ด์œ ๋Š” ์•Œ๊ฒ ๋Š”๋ฐ ๊ทธ๋ž˜์„œ setState๋ง๊ณ  state๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ์™œ ํ™”๋ฉด ๊ฐฑ์‹ ์ด ์•ˆ๋ ๊นŒ?

๋ณธ๋ก ๋ถ€ํ„ฐ ์ด์•ผ๊ธฐ ํ•˜์ž๋ฉด state์˜ ์ €์žฅ๋ฐฉ์‹์ด '๊ฐ์ฒด'์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

๊ทธ๋ž˜์„œ ๋ณ€๊ฒฝํ•œ state๊ฐ€ ํ™”๋ฉด์— ๋ณด์ด๊ฒŒ ๋˜๋ ค๋ฉด Update์ƒํƒœ์— ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š”๋ฐ ๊ทธ๋Ÿฌ๋ ค๋ฉด...

state ๋˜๋Š” Props๊ฐ€ ๋ณ€๊ฒฝ ๋˜์–ด์•ผํ•œ๋‹ค.

์ด์™€ ๊ด€๋ จํ•ด์„œ useState๊ฐ€ const๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋„ ๊ฐ™์ด ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, count ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฑด๋ฐ ์™œ let์ด ์•„๋‹๊นŒ? ๋ผ๊ณ  ์ƒ๊ฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๋ฉด ํ•จ์ˆ˜๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋˜์–ด ์ƒˆ scope๋ฅผ ๋งŒ๋“ค๊ณ , count๋ณ€์ˆ˜๋„ ์ƒˆ๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜๊ณ , ์ด๋Š” ์ด์ „ ๋ณ€์ˆ˜์™€ ์ƒ๊ด€์ด ์—†๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ const๋กœ ์„ ์–ธ๋œ count ๋ณ€์ˆ˜๋Š” ๋™์ผํ•œ scope์—์„œ ๋‹ค์‹œ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค!

const [count, setCount] = useState(0);

state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด update๊ฐ€ ๋ผ์•ผ ํ•˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€? ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๋ฆฌ์•กํŠธ๊ฐ€ ์ด ๊ฐ’์ด ๋ณ€๊ฒฝ ๋๋‹ค๋Š” ๊ฒƒ์„ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์ด ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€์˜ ๊ฐ’๋งŒ ๋ฐ”๋€Œ๋ฉด ๋ฐ”๋€๊ฒƒ์œผ๋กœ ์ธ์‹์„ ์•ˆํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋•Œ๋ฌธ์— ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ• ๋‹น ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ๊ทธ๊ฒƒ์„ ์œ„ํ•ด setState(), useState() ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

setState()์˜ ํŠน์ง•

1. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•œ๋‹ค.
2. ์—ฐ์†์ ์œผ๋กœ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ๋ฆฌ์•กํŠธ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” BATCH ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
3. state ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด state๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

๊ธฐ๋ณธ์ ์œผ๋กœ setState()ํ•จ์ˆ˜๋Š” state๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  state๊ฐ€ ํฌํ•จ๋œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒŒ ๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•จ์— ์ฃผ๋ชฉํ•ด์•ผํ•œ๋‹ค(= setState()๋ฅผ ์‹คํ–‰ํ•˜์ž๋งˆ์ž ๋ฐ”๋กœ state๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฐ”๋กœ ๋ Œ๋”๋งํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค!).

์ด๋ž˜์„œ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

๋‚ด๊ฐ€ ๋ฌด์ž‘์ • ์ด๋•Œ ๊ฐ’ ๋ฐ”๊ผˆ๊ฒ ์ง€~~ํ•˜๊ณ  ์กฐ๊ฑด๋ฌธ ์“ฐ๋‹ค๊ฐ€ ๋กœ์ง ์ž˜๋ชป ์ง  ์ ์ด ํ•œ๋‘๋ฒˆ์ด ์•„๋‹ˆ๋‹ค

 

๋‚˜์™€ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์˜›๋‚ ์— ๊ต์œกํ•˜๋ฉด์„œ ๋งŒ๋“ค์—ˆ๋˜ ํ€ด์ฆˆ๋ฅผ ๋ณด๊ณ  ํ•™์Šตํ•ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค

์ฝ˜์†”์— ์–ด๋–ป๊ฒŒ ์ฐํž์ง€ ๋งž์ถฐ๋ณด๋ฉด ๋œ๋‹ค

 

QUIZ 1.

const [value, setValue] = useState(0)

A : ์ด์ „ Value ๊ฐ’์„ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•ด์„œ 3๋งŒ ๋”ํ•ด์ง„๋‹ค.

 

QUIZ 2.

A : ์ด์ „ Value ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ๋ชปํ•ด์„œ 1+2+3 ์ด ๋”ํ•ด์ง„๋‹ค.

์—ญ์‹œ useEffect ๋‚ด์—์„œ ์ด์ „ state ๊ฐ’์€ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ•œ๋‹ค.

 

 

์ง„์งœ ๋น„๋™๊ธฐ,, ์กฐ๋งŒ๊ฐ„ ๋น„๋™๊ธฐ์— ๋Œ€ํ•ด ๋‹ค์‹œ ๊นŠ์ด์žˆ๊ฒŒ ๊ณต๋ถ€ํ•ด๋ด์•ผ๊ฒ ๋‹ค..

 


์ฐธ๊ณ 

https://rinrin-dev.tistory.com/93

https://velog.io/@wjdcksdud29/React-setState-useState%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0-TIL-53

728x90