State

1. ๊ฐœ์š”

๋ฆฌ์•กํŠธ์—์„œ props๊ฐ€ ์ค‘์š”ํ•˜๋“ฏ์ด state์˜ ๊ฐœ๋…๋„ ์ค‘์š”ํ•˜๋‹ค. ๊ณผ๊ฑฐ์—๋Š” ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ state๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ๋ฆฌ์•กํŠธ 16.8v ์ดํ›„์—๋Š” ๋ฆฌ์•กํŠธ์— Hook๊ฐœ๋…์ด ๋„์ž…๋˜์–ด ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ state๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ useState Hook๋ฅผ ํ†ตํ•ด state๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. useState๋Š” HooksํŒŒํŠธ์—์„œ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ณ  ์—ฌ๊ธฐ์„œ๋Š” ๋ฆฌ์•กํŠธ์˜ state๊ฐœ๋…์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๋„๋ก ํ•œ๋‹ค.


2. State๋ž€?

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์˜ ๋‚ด๋ถ€์—์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ•  ๋•Œ์— ์‚ฌ์šฉํ•œ๋‹ค.

  • ํ”„๋กœํผํ‹ฐ(props)์˜ ํŠน์ง•์€ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ’์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋ถ„๋ช… ์กด์žฌํ•˜๋ฉฐ, ์ด๋Ÿด๋•Œ state๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๊ฐ’์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋กœ ๋ณดํ†ต ์ด๋ฒคํŠธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์ ์ธ ๊ฐ’์„ ์ƒํƒœ(state)๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


3. state์˜ ํŠน์ง•

  • ๋ฆฌ์•กํŠธ์˜ state๋Š” ํ•˜๋‚˜์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด์ด๋‹ค.

  • ๋ Œ๋”๋ง์ด๋‚˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’๋งŒ state์— ํฌํ•จ์‹œ์ผœ์•ผ ํ•œ๋‹ค. state๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žฌ๋ Œ๋”๋ง๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ Œ๋”๋ง๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ๊ด€๋ จ ์—†๋Š” ๊ฐ’์€ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

  • state๋Š” ์ง์ ‘์ ์ธ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ๋‹ค. useState Hook์—์„œ ๋‹ค๋ฃจ๊ฒŒ ๋˜๋Š” setState()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด state๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰ setState()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ถ”์ ํ•˜๊ณ  ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋ง์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.


4. state๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝ์„ ํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ด์œ 

  1. state๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฆฌ์•กํŠธ๊ฐ€ render ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋„ ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

  2. setState๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋•Œ๋ฌธ์— state๊ฐ€ ์ง์ ‘ ์ˆ˜์ •๋˜์–ด ์—ฌ๋Ÿฌ๋ฒˆ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด์ „ ์—…๋ฐ์ดํŠธ ๋‚ด์šฉ์ด ๋‹ค์Œ ์—…๋ฐ์ดํŠธ ๋‚ด์šฉ์— ๋ฎ์–ด ์“ฐ์—ฌ์งˆ ์ˆ˜ ์žˆ๋‹ค.

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

PureComponent: ๊ธฐ๋ณธ Component์™€์˜ ๋‹จ์ˆœํ•œ ์„ฑ๋Šฅ์ ์ธ ์ฐจ์ด๋กœ PureComponent๋Š” shouldComponentUpdate๋ฅผ ํ†ตํ•ด props์™€ state์˜ ์–•์€ ๋น„๊ต๋ฅผ ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ re-render๋ฅผ ๋ง‰์•„์ค€๋‹ค. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์ผ ๊ฒฝ์šฐ์—๋Š” PureComponent์˜ ์—ญํ• ์„ React.memo๊ฐ€ ํ•˜๊ฒŒ ๋œ๋‹ค.


5. Conclusion

๋ฆฌ์•กํŠธ์—์„œ ์ •๋ง ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” state์ด๋‹ค. ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ์ •ํ™•ํ•œ ๋ฐฉ๋ฒ•์€ ๋ชจ๋ฅด์ง€๋งŒ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ์˜ ์‚ฌ์šฉ๋ฒ•์€ ์–ผ์ถ” ์•Œ๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ •ํ™•ํžˆ state๊ฐ€ ์–ด๋–ค ๊ฐœ๋…์ธ์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ผ๊ณ  ํ–ˆ์„ ๋• ๋ชปํ•˜์˜€๋‹ค. ์˜ค๋Š˜ ์ดํ›„์—” ์งง๊ฒŒ ๋‚˜๋งˆ ๋ˆ„๊ตฌ์—๊ฒŒ ์„ค๋ช…์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ ๊ฐ™์€ ๋Š๋‚Œ์ด ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  PureComponent๋Š” ์ฐพ์•„๋ณด๋‹ˆ๊นŒ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฐœ๋…์ด์—ˆ๋˜ ๊ฑฐ ๊ฐ™๋‹ค. ํ•ด๋‹น ๊ฐœ๋…์— ๋Œ€ํ•œ ๊นŠ์€ ๊ณต๋ถ€๋ณด๋‹ค๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋–ค ๊ฐœ๋…์ธ์ง€๋งŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€๊ณ  ์ž์„ธํ•œ ๊ฐœ๋… ๊ณต๋ถ€๋Š” React.memo๋กœ ํ•˜์ž.๐Ÿ˜ƒ


์ฐธ๊ณ 

๋„์„œ - ์†Œํ”Œ์˜ ์ฒ˜์Œ ๋งŒ๋‚œ ๋ฆฌ์•กํŠธ [React] 4. React ์ปดํฌ๋„ŒํŠธ(3) - State ์•Œ์•„๋ณด๊ธฐ(React Hooks ์‚ฌ์šฉ) state๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  setState๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”. React - PureComponent ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ


๐Ÿ“… 2022-07-25

Last updated