240106_useEffect_useRef

๊ฐœ์š”

์บก์ฒ˜|vience.io/vience-canvas/mlops

๋ฐ”์ด์–ธ์Šค MLOps ์†Œ๊ฐœ

  • ์ฝ”๋”ฉ ์—†์ด ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด python ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ 

  • ์„œ๋ฒ„์—์„œ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ํ•™์Šต์„ ์‹œํ‚ค๊ณ ,

  • ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธ

ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ ์ƒํ™ฉ

๊ทธ ์ค‘ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , ๊ฐ ๋…ธ๋“œ์˜ property๋ฅผ ์„ค์ •ํ•˜๋Š” UI๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—… ์ค‘ ๋งŒ๋‚œ ๋ฌธ์ œ์ƒํ™ฉ ์ž…๋‹ˆ๋‹ค.

์บ”๋ฒ„์Šค์— ๊ทธ๋ ค์ง€๋Š” ๋…ธ๋“œ UI๋Š” ํŠธ๋ฆฌ ํ˜•ํƒœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ rete.js ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•ด ๊ทธ๋ ธ๊ณ , right panel๋กœ ํŠธ๋ฆฌ์˜ ๊ฐ ๋…ธ๋“œ์— ์ €์žฅ๋œ property(options)๋ฅผ ์กฐ์ž‘ํ•˜๋Š” UI๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

์ด ๋•Œ, ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•ด์•ผํ• ์ง€ ๊ตฌ๋ถ„์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์„œ๋ฒ„์—์„œ ๋ณด๋‚ด์ค€ ํŠธ๋ฆฌ ๋ฐ์ดํ„ฐ์— ์ €์žฅ๋œ ๋‚ด์šฉ์„ UI์— ๋ฐ˜์˜

  2. FE์—์„œ preset์œผ๋กœ ์„ค์ •ํ•œ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ UI์— ๋ฐ˜์˜

  3. ์œ ์ €๋กœ ์ธํ•ด ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ UI์— ๋ฐ˜์˜

  4. ์œ„ ๋ชจ๋“  ์ƒํ™ฉ์— ํ•ด๋‹น๋˜์ง€ ์•Š์œผ๋ฉด ์ดˆ๊ธฐ๊ฐ’์„ ๋ฐ˜์˜

๋™์ž‘

๋…ธ๋“œ์˜ options

๋ฐ์ดํ„ฐ ์ €์žฅ

๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

-

โฌ‡๏ธ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

โฌ†๏ธ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’ ์ „๋‹ฌ

์ธํ’‹ ์ปดํฌ๋„ŒํŠธ

์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ํ‘œ์‹œ

์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ

์ด ๊ณผ์ •์—์„œ ๊ฒช์—ˆ๋˜ ์–ด๋ ค์›€์„ ๊ธฐ๋กํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์ƒํ™ฉ 1 - useEffect ๋ฌดํ•œ๋ฃจํ”„

  1. ๋ฌธ์ œ์  : ๋ฌดํ•œ๋ฃจํ”„ ์ƒ์„ฑ

    1. input๊ฐ’์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค Node์˜ option์— ์ „๋‹ฌ

    2. input์ด ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค Node์— setValue

    3. Node์—์„œ ๋ฐ›์•„์˜จ prevOption์ด ๋ณ€ํ™” ๊ฐ์ง€

    4. ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜๊ฐ€ ๋‹ค์‹œ ์ž‘๋™

  2. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

    1. ๋ฐ›์•„์˜ค๋Š” ๋ฐ์ดํ„ฐ์™€ ์˜ฌ๋ ค๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌ (prevOption <-> Option)

    2. loading ์ƒํƒœ ์ถ”๊ฐ€

      1. ์ดˆ๊ธฐ๊ฐ’์ด ์ „๋‹ฌ์ด ์™„๋ฃŒ๋˜๋ฉด loading์„ false๋กœ ์„ค์ •

  3. ์ž‘๋™ ๋ฐฉ์‹:

    1. ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ loading, setLoading์„ ์„ ์–ธํ•˜๊ณ 

    2. ๋…ธ๋“œ์—์„œ ๋ฐ›์•„์˜ค๋Š” option์„ prevOption, useRef์œผ๋กœ,

    3. setValue๋กœ ์˜ฌ๋ ค์ฃผ๋Š” option์€ useState ์ƒํƒœ๋กœ ๋ถ„๋ฆฌ๋ฅผ ํ•ด์ค€ ๋’ค์—

    4. prevOption ์ด ์ตœํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ input ui์— ํ‘œ์‹œ๋˜๊ณ ,

    5. ์ตœํ•˜์œ„ ์ƒํƒœ setTuple ์— ์ €์žฅ๋ ๋•Œ๊นŒ์ง€ loading์„ true๋กœ ๋งŒ๋“ค์—ˆ๊ณ ,

    6. ๊ทธ๋™์•ˆ setValue ์™€ ๊ฐ™์€ ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋“ค์€ loading์ด false์—ฌ์•ผ๋งŒ ์ž‘๋™

์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ ๊ธฐ์กด์—๋Š” node์˜ option์— ์ด๋ฏธ ๊ฐ’์ด ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ์ด๊ฒƒ์„ input์— ํ‘œ์‹œ๋ฅผ ํ•ด์ฃผ๊ณ , ์ด๋ฅผ state์— ์ ์šฉ์„ ์‹œํ‚ค๋ฉด setValue๊ฐ€ ์ผ์–ด๋‚ฌ์ง€๋งŒ, loading์ด true์—ฌ์„œ ๋…ธ๋“œ์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์ƒํ™ฉ 2 - ๋…ธ๋“œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋กœ input ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •ํ•˜๊ธฐ

  1. ๋ฌธ์ œ์ 

    1. ๋…ธ๋“œ์— ์ €์žฅ๋œ ๊ฐ’์ด ์žˆ๋Š”๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ ,

    2. ๊ฐ’์ด ์—†์„ ๋•Œ ์ž๋™์œผ๋กœ ์„ค์ •๋˜๋Š” ์ดˆ๊ธฐ๊ฐ’์ด ๋‚˜ํƒ€๋‚จ

  2. ์›์ธ

    1. option์˜ ๊ฐ’์„ useRef๋กœ prevOption์— ์ „๋‹ฌํ•˜๋Š” ์‹œ์ ๋ณด๋‹ค

    2. ์ตœํ•˜์œ„์˜ input ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋˜๊ณ  componentDidMount()์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๋นˆ useEffect๊ฐ€ ์‹คํ–‰๋˜์–ด prevOption์˜ ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ์‹œ์ ์ด ๋” ์•ž์ด๋‹ค.

  3. ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

    1. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž useEffect์˜ ์‹คํ–‰ ์‹œ์ ,

    2. ๊ทธ์— ๋”ฐ๋ฅธ ์ƒํƒœ์™€ props ๊ฐ’์„ ์ „๋‹ฌ ๋ฐ›๋Š” ์‹œ์ ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๊ณ ,

    3. input์ปดํฌ๋„ŒํŠธ์—์„œ prevOption์˜ ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ์‹œ์ ์„ ์ˆ˜์ •

      1. As-is: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋œ ์‹œ์  === useEffect ์˜์กด ๋ฐฐ์—ด์ด ๋นˆ ๋ฐฐ์—ด

      2. To-be: ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ๋ฐ›๋Š” option์˜ ํŠน์ • ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ์‹œ์  === useEffect์˜ ์˜์กด ๋ฐฐ์—ด์ด option.current[id]

๋‘ ๋ฌธ์ œ ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐฐ์šด ์ 

  1. useEffect์˜ ์˜๋ฏธ๋Š” ๋ Œ๋”๋ง์˜ ๋ถ€์ˆ˜ํšจ๊ณผ์ด๋‹ค.

    1. ๋ Œ๋”๋ง์ด ๋˜๋ฉด(!) ๋”ฐ๋ผ์˜ค๋Š” ๋™์ž‘์œผ๋กœ ๋ Œ๋”๋ง์ด ๋๋‚œ ์ดํ›„์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ref์— DOM ๋…ธ๋“œ๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. useEffect์˜ ๋ชฉ์ ์€ ๋™๊ธฐํ™”๋‹ค.

  3. ์˜์กด ๋ฐฐ์—ด์— ๊ฐ์ฒด๋ฅผ ๋„ฃ์ง€ ๋ง์ž.

    1. ์–ด๋–ค effect๊ฐ€ prevOption ๋‚ด์˜ ํŠน์ • ํ‚ค์˜ (๊ฐ์ฒดํƒ€์ž…์ด ์•„๋‹Œ)๊ฐ’์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ฝ• ์ง‘์–ด์„œ prevOption.current.name๊ณผ ๊ฐ™์ด ์˜์กด ๋ฐฐ์—ด์— ๋ช…์‹œํ•ด์ฃผ์ž. prevOption๋งŒ ๋„ฃ์„ ๊ฒฝ์šฐ์— ๊ฐ์ฒด๋Š” ๋ณ€ํ•ด๋„ useEffect๊ฐ€ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†๋‹ค.

    2. useRef๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ์— ์ฃผ์˜ํ•˜์ž. ๋ฆฌ๋ Œ๋”๋ง์„ ์œ ๋„ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ฐ์ฒด์ด๋ฏ€๋กœ ๋ฆฌ๋ Œ๋”๋ง์„ ์œ ๋„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด useState๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๋œ๋‹ค.

  4. state๋Š” const, ์ƒ์ˆ˜์ด๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ๋ฆฌ๋ Œ๋” ์‹œ์ ์— ๊ฐ’์„ ๋ฐ”๊พธ๊ณ  ํ•ด๋„ const ๋ณ€์ˆ˜๋Š” ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค. ๊ฐ’์„ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฆฌ๋ Œ๋”๊ฐ€ ํ•œ ๋ฒˆ ๋” ์ผ์–ด๋‚˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.

์•„๋ž˜๋Š” JavaScript์˜ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ๊ณผ useEffect์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด A Complete Guide to useEffect๋ผ๋Š” ๊ธ€์„ ํ•œ๊ธ€๋กœ ๋ฒˆ์—ญํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.


Effect๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์™„์ „ ๊ฐ€์ด๋“œ

๋งค ๋ Œ๋”๋งˆ๋‹ค์˜ props์™€ state๊ฐ€ ์žˆ๋‹ค

effects์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๊ธฐ ์ „์—, ์šฐ๋ฆฌ๋Š” rendering์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ Counter๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ•์กฐํ‘œ์‹œ๋œ ์ค„์„ ์ž์„ธํžˆ ๋“ค์—ฌ๋‹ค ๋ณด์„ธ์š”.

์ด ์ค„์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๊ฐ€ ๋ฌด์—‡์ผ๊นŒ์š”? count๊ฐ€ ์–ด๋–ป๊ฒŒ๋“  ์šฐ๋ฆฌ์˜ ์ƒํƒœ์˜ ๋ณ€ํ™”๋ฅผ "์ง€์ผœ๋ณด๊ณ " ์žˆ๊ณ , ์ž๋™์œผ๋กœ updateํ•ด์ฃผ๋Š” ๊ฑธ๊นŒ์š”? ์ฒ˜์Œ ๋ฐฐ์šธ๋•Œ์—๋Š” ์œ ์šฉํ•œ ๋น„์œ ์˜€์„์ง€ ๋ชจ๋ฅด์ง€๋งŒ ์ด๊ฒƒ์€ ์ •ํ™•ํ•œ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด ์˜ˆ์‹œ์—์„œ count๋Š” ๊ทธ์ € ํ•˜๋‚˜์˜ ์ˆซ์ž์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ "data binding", "watcher", "proxy" ๊ณผ ๊ฐ™์€ ๋งˆ์ˆ ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ข‹์€ ์˜ค๋ž˜๋œ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ๋ Œ๋”๋ง ๋  ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ useState()๋กœ ๋ถ€ํ„ฐ ์–ป์–ด์˜จ count ๋ณ€์ˆ˜๋Š” 0 ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ setCount(1)ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ๋ฆฌ์•กํŠธ๋Š” ์šฐ๋ฆฌ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด์š”. ์ด๋ฒˆ์—๋Š” count ๋ณ€์ˆ˜์˜ ๊ฐ’์ด 1์ด ๋  ๊ฒ๋‹ˆ๋‹ค. ์ด๊ฑธ ๊ณ„์† ๋ฐ˜๋ณต ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ๋งˆ๋‹ค, ๋ฆฌ์•กํŠธ๋Š” ์šฐ๋ฆฌ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด์š”. ๋งค ๋ Œ๋” ๊ฒฐ๊ณผ๋Š” ๊ทธ ์ž์ฒด์˜ counter ์ƒํƒœ ๊ฐ’์„ "๋ณด๊ณ " ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ƒํƒœ๊ฐ’์€ ์šฐ๋ฆฌ์˜ ํ•จ์ˆ˜ ์•ˆ์— ์žˆ๋Š” ์ƒ์ˆ˜์ฃ .

๊ทธ๋Ÿฌ๋‹ˆ ์œ„์˜ ์ฝ”๋“œ ํ•œ ์ค„์€ ์–ด๋– ํ•œ ํŠน๋ณ„ํ•œ data binding์„ ํ•˜๋Š”๊ฒŒ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ์ € ํ•˜๋‚˜์˜ ์ˆซ์ž ๊ฐ’์„ ๋ Œ๋” ๊ฒฐ๊ณผ์— ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ ๋ฟ์ด์ฃ . ๊ทธ ์ˆซ์ž๋Š” ๋ฆฌ์•กํŠธ๋กœ๋ถ€ํ„ฐ ์ œ๊ณต๋˜์—ˆ๊ณ ์š”.

์šฐ๋ฆฌ๊ฐ€ count๋ฅผ setํ•  ๋•Œ(setCountํ•  ๋•Œ), ๋ฆฌ์•กํŠธ๋Š” ์šฐ๋ฆฌ์˜ ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ count ์˜ ๊ฐ’์€ ๋‹ฌ๋ผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฆฌ์•กํŠธ๋Š” ์šฐ๋ฆฌ์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ Œ๋” ๋ ฌ๊ณผ์™€ ๋งž์ถ”๊ธฐ ์œ„ํ•ด์„œ DOM์„ ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”ํ•˜๊ฒŒ ๊ฐ€์ ธ๊ฐ€์•ผํ•  ์ ์€ ์–ด๋–ค ํŠน์ • ๋ Œ๋” ์•ˆ์— ์žˆ๋Š” count ์ƒ์ˆ˜๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ณ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ˜ธ์ถœ๋œ ๊ฒƒ์€ "์šฐ๋ฆฌ์˜ ์ปดํฌ๋„ŒํŠธ"์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งค ๋ Œ๋” ๋งˆ๋‹ค ๊ทธ ์ž์ฒด์˜ count ๊ฐ’์„ "๋ณด๊ณ " ์žˆ๋Š” ๊ฑฐ์˜ˆ์š”. ๋ Œ๋” ์‚ฌ์ด์— ๊ณ ๋ฆฝ๋˜์–ด์žˆ๋Š”.

๋งค ๋ Œ๋”๋งˆ๋‹ค ๊ทธ ์ž์ฒด์˜ event handler๋“ค์„ ๊ฐ€์ง„๋‹ค

์ง€๊ธˆ๊นŒ์ง€ ์ž˜ ๋”ฐ๋ผ์˜ค์…จ๋‚˜์š”? ์ข‹์•„์š”. ๊ทธ๋ ‡๋‹ค๋ฉด event handler๋Š” ์–ด๋–ค๊ฐ€์š”?

์•„๋ž˜์˜ ์˜ˆ์‹œ๋ฅผ ๋ด…์‹œ๋‹ค. count ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ 3์ดˆ ๋’ค์— ๊ฒฝ๊ณ ์ฐฝ์„ ๋ณด์—ฌ์ฃผ๋„ค์š”.

์ œ๊ฐ€ ์ด ์ผ๋ จ์˜ ๊ณผ์ •์„ ์‹คํ–‰ํ•ด๋ณธ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค.

  • ์นด์šดํ„ฐ๋ฅผ 3๊นŒ์ง€ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

  • alert ๋ณด์—ฌ์ฃผ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

  • timeout ๋ฒ„์ €๊ฐ€ ์šธ๋ฆฌ๊ธฐ ์ „์— 5๊นŒ์ง€ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

๊ฒฝ๊ณ ์ฐฝ์ด ๋ญ๋ผ๊ณ  ๋ณด์—ฌ์ค„ ๊ฒƒ ๊ฐ™์œผ์‹ ๊ฐ€์š”? ๊ฒฝ๊ณ ์ฐฝ์ด ๋œจ๋Š” ๋‹น์‹œ์˜ ์นด์šดํ„ฐ ์ƒํƒœ ๊ฐ’์ธ 5์ผ๊นŒ์š”? ์•„๋‹ˆ๋ฉด show alert ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ์‹œ์ ์˜ ์ƒํƒœ๊ฐ’์ธ 3์ผ๊นŒ์š”?


์Šคํฌ ์ฃผ์˜


๊ฐ€์„œ ์ง์ ‘ ํ•ด๋ณด์„ธ์š”!

๋งŒ์•ฝ ์ด ํ–‰๋™์ด ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ˜„์žฌ ์ˆ˜์‹ ์ž์˜ id๊ฐ€ ์ƒํƒœ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๊ณ  send ๋ฒ„ํŠผ์ด ์žˆ๋Š” ์ฑ„ํŒ… ์•ฑ๊ณผ ๊ฐ™์€ ๋” ์‹ค์šฉ์ ์ธ ์˜ˆ์‹œ๋ฅผ ์ƒ์ƒํ•ด ๋ด…์‹œ๋‹ค. ๊ฒฝ๊ณ ์ฐฝ์€ ๊ทธ ๋ฒ„ํŠผ์ด ํด๋ฆญ๋˜๋˜ ๋‹น์‹œ์˜ ์ƒํƒœ๊ฐ’์„ "ํฌ์ฐฉ"ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ–‰๋™์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋“ค๋„ ์žˆ์ง€๋งŒ, ์ €๋Š” ์ง€๊ธˆ์œผ๋กœ์จ๋Š” ๊ธฐ๋ณธ์ ์ธ ์ƒํ™ฉ์—๋งŒ ์ง‘์ค‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ˜ํƒˆ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•  ๋•Œ๋Š” opt-in escape hatches(์›ํ•  ๋•Œ ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ ์˜ต์…˜, ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ปจํŠธ๋กค ํ•˜๋Š” ๋ฐฉ๋ฒ•, ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ ์‘ํ•˜๋Š” ๋ฐฉ๋ฒ•)๋กœ๋ถ€ํ„ฐ ์ €ํ•ญ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ตฌ๋ถ„ํ•ด๋‚ด๋Š” ๊ฒƒ(๊ทธ๋ƒฅ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ์ด๋ผ๋Š” ๋œป)์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.


ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?

์šฐ๋ฆฌ๋Š” count ๊ฐ’์ด ๋งค ํŠน์ • ํ˜ธ์ถœ๋งˆ๋‹ค ์šฐ๋ฆฌ์˜ ํ•จ์ˆ˜์—์„œ ์ƒ์ˆ˜๋ผ๊ณ  ์ด์•ผ๊ธฐ ํ•ด์™”์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๊ฐ•์กฐํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ ๋ฉ๋‹ˆ๋‹ค ์—ฌ๋Ÿฌ๋ฒˆ, ๋งค ๋ Œ๋”๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ, ํ•˜์ง€๋งŒ ๊ทธ ๋งŽ์€ ํšŸ์ˆ˜ ์ค‘ ๋งค ๋ฒˆ ๊ทธ ์•ˆ์— ์žˆ๋˜ count ๊ฐ’์€ ์ƒ์ˆ˜์ด๊ณ  ํŠน์ •ํ•œ ๊ฐ’, ๊ทธ ๋ Œ๋”๋ฅผ ์œ„ํ•œ ์ƒํƒœ๊ฐ’ ์œผ๋กœ ์„ค์ • ๋˜์–ด ์žˆ์ง€์š”.

์ด๊ฒƒ์€ ๋ฆฌ์•กํŠธ์—๋งŒ ๊ตญํ•œ๋œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜๋„ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ด์š”.

์ด ์˜ˆ์‹œ์—์„œ ์™ธ๋ถ€ ๋ณ€์ˆ˜์ธ someone ๋ณ€์ˆ˜๋Š” ๋ช‡ ๋ฒˆ ์žฌ ํ• ๋‹น ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ์˜ ์–ด๋”˜๊ฐ€์—์„œ์™€ ๊ฐ™์ด, "ํ˜„์žฌ" ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋Š” ๋ณ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ sayHi ํ•จ์ˆ˜ ์•ˆ์—๋Š” ํŠน์ •ํ•œ ํ˜ธ์ถœ๋กœ๋ถ€ํ„ฐ person์œผ๋กœ ์—ฐ๊ด€๋˜์–ด์ง„ ์ง€์—ญ ์ƒ์ˆ˜์ธ name ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ƒ์ˆ˜๋Š” ์ง€์—ญ์ ์ด๊ณ , ๊ทธ๋ž˜์„œ ๋งค ํ˜ธ์ถœ ์‚ฌ์ด์—์„œ ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค! ๊ฒฐ๊ณผ์ ์œผ๋กœ ์‹œ๊ฐ„์ด ๋‹ค ๋˜์—ˆ์„ ๋•Œ, ๋งค ๊ฒฝ๊ณ ์ฐฝ์€ ๊ทธ ์ž์ฒด์˜ name ๋ณ€์ˆ˜๋ฅผ "๊ธฐ์–ต"ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋“ค์ด ์–ด๋–ป๊ฒŒ ํด๋ฆญ ๋‹น์‹œ์˜ count๋ฅผ ํฌ์ฐฉํ•˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•ด์ค๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ๋Œ€์ฒด ์›์น™์„ ์ ์šฉํ•˜์˜€๋‹ค๋ฉด, ๋งค ๋ Œ๋”๋Š” ๊ทธ ์ž์ฒด์˜ count๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด "๋ณด์•˜์„" ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํšจ๊ณผ์ ์œผ๋กœ, ๋งค ๋ Œ๋”๋Š” ๊ทธ ์ž์ฒด์˜ "๋ฒ„์ „"์˜ handleAlertClick ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋ฒ„์ „๋“ค์˜ ๊ฐ๊ฐ์€ ๊ทธ ์ž์ฒด์˜ count ๊ฐ’์„ "๊ธฐ์–ต"ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด ์˜ˆ์‹œ์—์„œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํŠน์ • ๋ Œ๋”์— "์†Œ์†"๋˜์–ด ์žˆ๊ณ , ์—ฌ๋Ÿฌ๋ถ„์ด ํด๋ฆญํ–ˆ์„ ๋•Œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ทธ ๋ Œ๋”"๋กœ ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜จ" counter ์ƒํƒœ๋ฅผ ๊ณ„์†ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŠน์ • ๋ Œ๋” ์•ˆ์—์„œ props์™€ ์ƒํƒœ๋Š” ์˜์›ํžˆ ๊ฐ™์€ ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ props์™€ state๊ฐ€ ๋งคใ… ๋ Œ๋” ์‚ฌ์ด์— ๋…๋ฆฝ์ ์ด๊ณ , ๊ทธ๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ์–ด๋–ค ๊ฐ’๋“ค(์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋„ ํฌํ•จ)๋„ ๊ทธ๋Ÿฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค ๋˜ํ•œ ํŠน์ •ํ•œ ๋ Œ๋”์— "์†ํ•ด" ์žˆ๋Š” ๊ฒƒ์ด์ฃ . ๊ทธ๋ž˜์„œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์•ˆ์— ์žˆ๋Š” async ํ•จ์ˆ˜ ์กฐ์ฐจ๋„ ๊ฐ™์€ count ๊ฐ’์„ "๋ณผ" ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Side Note: ๋‚˜๋Š” handleAlertClick ํ•จ์ˆ˜ ์œ„์—์„œ ํ•จ์ˆ˜ ๋ฐ”๋กœ ์•ˆ์œผ๋กœ ๊ตฌ์ฒด์ ์ธ count ๊ฐ’์„ inline ํ–ˆ๋Š”๋ฐ์š”. ์ด ๋ฉ˜ํƒˆ ๋Œ€์ฒด๋Š” ์•ˆ์ „ํ•˜์ฃ  ์™œ๋ƒํ•˜๋ฉด count๊ฐ€ ํ˜น์‹œ๋ผ๋„ ๋ณ€ํ•  ๋ฆฌ ์—†์œผ๋‹ˆ๊นŒ์š”. ํŠน์ • ๋ Œ๋” ์•ˆ์—์„œ. ๊ทธ๊ฒƒ์€ ์ƒ์ˆ˜๋กœ์จ ์„ ์–ธ๋˜์—ˆ๊ณ , ์ˆซ์ž ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ ๋˜ํ•œ ใ…‡๊ฐ์ฒด ์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ๊ฐ’๋“ค์— ๋Œ€ํ•ด์„œ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ๊ฐํ•˜๊ธฐ์— ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ค์ง ์ƒํƒœ๋ฅผ ๋Œ์—ฐ๋ณ€์ด ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์— ๋™์˜ํ•œ ์ƒํ™ฉ์—์„œ๋งŒ์š”. rmrjtdmf qusgudtlzlsms rjt eotlsdp ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋กœ setStateํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด์ „ ๋ Œ๋”์— ์†ํ•ด์žˆ๋Š” ์ƒํƒœ๊ฐ€ ์˜จ์ „ํ•˜๋‹ˆ๊นŒ์š”.

๋งค ๋ Œ๋”๋งˆ๋‹ค ๊ทธ ์ž์ฒด์˜ Effect๋ฅผ ๊ฐ–๋Š”๋‹ค.

์ด ๊ธ€์ด effects์— ๊ด€๋ จ๋œ ๊ธ€์ด์–ด์•ผ ํ•˜๋Š”๋ฐ ์šฐ๋ฆฌ๋Š” ์ด์ œ์„œ์•ผ ์ดํŽ™ํŠธ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๋„ค์š”. ์šฐ๋ฆฌ๋Š” ์ด์ œ ๋ฐ”๋กœ์žก์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ, ์ดํŽ™ํŠธ๋Š” ์ •๋ง๋กœ ์ „ํ˜€ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ์˜ ์˜ˆ์‹œ ์ค‘ ํ•˜๋‚˜๋กœ ๋Œ์•„๊ฐ€ ๋ด…์‹œ๋‹ค.

๋‹น์‹ ์—๊ฒŒ ์งˆ๋ฌธ ํ•˜๋‚˜ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ดํŽ™ํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์ตœ๊ทผ count ์ƒํƒœ๋ฅผ ์ฝ์„๊นŒ์š”?

์•„๋งˆ๋„, effect ํ•จ์ˆ˜ ์•ˆ์— ์‹ค์‹œ๊ฐ„์œผ๋กœ count๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ์ผ์ข…์˜ "data binding"์ด๋ผ๊ฑฐ๋‚˜ "watching" ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๊ฒ ์ฃ ? ์•„๋งˆ๋„ count๋Š” ๋ฆฌ์•กํŠธ๊ฐ€ ์šฐ๋ฆฌ์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์„ค์ •ํ•ด์„œ ์šฐ๋ฆฌ์˜ ์ดํŽ™ํŠธ๊ฐ€ ํ•ญ์ƒ ์ตœ๊ทผ์˜ ๊ฐ’์„ ๋ณด๋„๋ก ํ•˜๋Š” ๋ณ€ํ˜•๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๊ฒ ์ฃ ?

์•„๋‹ˆ์š”.

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ count๊ฐ€ ํŠน์ •ํ•œ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋” ์•ˆ์—์„œ ๋ณ€์น˜ ์•Š๋Š” ์ƒ์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” count ์ƒํƒœ๋ฅผ ๊ทธ๋“ค์ด ์†ํ•œ ๋ฐ”๋กœ ๊ทธ ๋ Œ๋”๋กœ๋ถ€ํ„ฐ ๋ด…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด count๊ฐ’์€ ๊ทธ๋“ค์˜ scope ์•ˆ์˜ ๋ณ€์ˆ˜๋‹ˆ๊นŒ์š”. ์ดํŽ™ํŠธ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค!

๊ทธ๊ฒƒ์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” effect ์•ˆ์—์„œ ์–ด์ฐŒ๋๋“  ๋ณ€ํ™”ํ•˜๋Š” ๋ณ€์ˆ˜๋Š” count๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋งค ๋ Œ๋”๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฒƒ์€ effect ํ•จ์ˆ˜ ๊ทธ์ž์ฒด์ž…๋‹ˆ๋‹ค.

๋งค ๋ฒ„์ „์€ ๊ทธ๊ฒƒ์ด ์†ํ•œ ๋ Œ๋”๋กœ ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜จ count value๋ฅผ ๋ฐ”๋ผ๋ด…๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ œ๊ณตํ•œ ์ดํŽ™ํŠธ ํ•จ์ˆ˜๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ๋ณ€ํ™”๋ฅผ DOM์— flushingํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šคํฌ๋ฆฐ์— ๊ทธ๋ฆฌ๋„๋ก ํ•œ ํ›„์— ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋‚˜์˜ ๊ฐœ๋…์ ์ธ ์ดํŽ™ํŠธ๋ฅผ ์—ฌ๊ธฐ์„œ ์ด์•ผ๊ธฐ ํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๊ทธ๊ฒƒ์€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋งค ๋ Œ๋”๋งˆ๋‹ค ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋งค ์ดํŒฉํŠธ ํ•จ์ˆ˜๋Š” ํ”„๋กญ์Šค์™€ ์ƒํƒœ๋ฅผ ๊ทธ๊ฒƒ์ด ์†ํ•œ ํŠน์ • ๋ Œ๋”๋กœ๋ถ€ํ„ฐ ๋ฐ”๋ผ๋ด…๋‹ˆ๋‹ค.

๊ฐœ๋…์ ์œผ๋กœ ์ดํŽ™ํŠธ๊ฐ€ ๋ Œ๋” ๊ฒฐ๊ณผ์˜ ์ผ๋ถ€๋ผ๋Š” ๊ฒƒ์„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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


์šฐ๋ฆฌ๊ฐ€ ๊ฒฌ๊ณ ํ•œ ์ดํ•ด๋ฅผ ํ™•์‹คํžˆ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ฅผ ๋ณต๊ธฐํ•ด ๋ด…์‹œ๋‹ค.

๋ฆฌ์•กํŠธ: state๊ฐ€ 9์ผ ๋•Œ UI๋ฅผ ๋‚ด๊ฒŒ ์ค˜. ์—ฌ๋Ÿฌ๋ถ„์˜ ์ปดํฌ๋„ŒํŠธ: ์—ฌ๊ธฐ ๋ Œ๋” ๊ฒฐ๊ณผ์•ผ <p>You clicked 0 times</p> ๋„ˆ ํ• ์ผ ๋งˆ์น˜๋ฉด ์ด ์ดํŽ™ํŠธ๋ฅผ ์‹คํ–‰ ์‹œํ‚ค๋„๋ก ํ•˜๋Š” ๊ฒƒ๋„ ๊ธฐ์–ตํ•ด์ค˜. () => { document.title = 'You clicked 0 times' } ๋ฆฌ์•กํŠธ: ๋ฌผ๋ก ์ด์ง€. UI๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  ์žˆ์–ด. ๋ธŒ๋ผ์šฐ์ €์•ผ, ๋‚˜ DOM์— ๋ช‡๊ฐ€์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•ด. ๋ธŒ๋ผ์šฐ์ €: ์ข‹์•„, ์Šคํฌ๋ฆฐ์— ๊ทธ๊ฑธ ๊ทธ๋ ธ์–ด. ๋ฆฌ์•กํŠธ: ์ข‹์•„, ์ด์ œ ๋„ˆ๊ฐ€ ๋‚ด๊ฒŒ ์ค€ ์ดํŽ™ํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ๊ฒŒ. () => { document.title = 'You clicked 0 times' } ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  ์žˆ์–ด.

์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ํด๋ฆญํ•œ ํ›„์— ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ณต๊ธฐํ•ด ๋ณด์ž.

์ปดํฌ๋„ŒํŠธ: ๋ฆฌ์•กํŠธ์•ผ, ๋‚ด ์ƒํƒœ๋ฅผ 1 ๋กœ ์„ค์ •ํ•ด. ๋ฆฌ์•กํŠธ: ์ƒํƒœ๊ฐ€ 1์ผ ๋•Œ UI๋ฅผ ๋‚ด๊ฒŒ ์ค˜. ์ปดํฌ๋„ŒํŠธ: ๋ Œ๋” ๊ฒฐ๊ณผ์•ผ. <p>You clicked 1 times</p> ๋„ˆ ํ• ์ผ ๋งˆ์น˜๋ฉด ์ด ์ดํŽ™ํŠธ๋ฅผ ์‹คํ–‰ ์‹œํ‚ค๋„๋ก ํ•˜๋Š” ๊ฒƒ๋„ ๊ธฐ์–ตํ•ด์ค˜. () => { document.title = 'You clicked 0 times' } ๋ฆฌ์•กํŠธ: ๋ฌผ๋ก ์ด์ง€. UI๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ ์žˆ์–ด. ๋ธŒ๋ผ์šฐ์ €์•ผ, ๋‚˜ DOM์„ ๋ฐ”๊ฟจ์–ด. ๋ธŒ๋ผ์šฐ์ €: ์ข‹์•„, ๋‚ด๊ฐ€ ๋„ˆ๊ฐ€ ๋ณ€ํ™”์‹œํ‚จ ๊ฑธ ์Šคํฌ๋ฆฐ์— ํ‘œ์‹œํ–ˆ์–ด. ๋ฆฌ์•กํŠธ: ์•Œ๊ฒ ์–ด, ์ด์ œ ๋‚ด๊ฐ€ ๋ฐฉ๊ธˆ ํ•œ ๋ Œ๋”์— ์†ํ•œ ์ดํŽ™ํŠธ๋ฅผ ์‹คํ–‰ ์‹œํ‚ค์ž. () => { document.title = 'You clicked 1 times' }.๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  ์žˆ์–ด.

๋งค ๋ Œ๋”๋งˆ๋‹ค ๊ทธ ์ž์ฒด์˜ ... ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค

์šฐ๋ฆฌ๋Š” ์ด์ œ effect ๋“ค์ด๋งค ๋ Œ๋” ์ดํ›„์— ์‹คํ–‰๋˜๊ณ , effect๋“ค์€ ๊ฐœ๋…์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฐ๊ณผ๋ฌผ์˜ ์ผ๋ถ€์ด๋ฉฐ, ๊ทธ๊ฒƒ๋“ค์€ ๊ทธ ํŠน์ • ๋ Œ๋”๋กœ๋ถ€ํ„ฐ์˜ props์™€ ์ƒํƒœ๊ฐ’์„ "๋ณธ๋‹ค"๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค.

์ƒ๊ฐ ์‹คํ—˜์„ ํ•ด๋ด…์‹œ๋‹ค. ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด์„ธ์š”.

์ œ๊ฐ€ ์•ฝ๊ฐ„์˜ ๋”œ๋ ˆ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฌ๋Ÿฌ๋ฒˆ ํด๋ฆญํ•˜๋ฉด ๋กœ๊ทธ์— ์–ด๋–ค ๊ฒƒ์ด ํ‘œ์‹œ๋ ๊นŒ์š”? (๋กœ๊ทธ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ์„๊นŒ์š”? ๋กœ๊ทธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ผ๊นŒ์š”?)

์ด๊ฒŒ ํ™•๋ฅ  ๊ฒŒ์ž„์ด๊ณ  ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ๋Š” ์ง๊ด€์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ์ผ๋ จ์˜ ๋กœ๊ทธ๋ฅผ ๋ณด๊ฒŒ ๋ ๊ฑฐ์˜ˆ์š”. ๊ฐ๊ฐ์€ ํŠน์ • ๋ Œ๋”์— ์†ํ•ด์žˆ์œผ๋ฏ€๋กœ ๊ทธ ์ž์ฒด์˜ count ๊ฐ’๊ณผ ํ•จ๊ป˜์š”.

์—ฌ๋Ÿฌ๋ถ„์€ ๋‹น์—ฐํžˆ ๊ทธ๋ ‡๊ฒŒ ์ž‘๋™ํ•˜๊ฒ ์ง€, ์•„๋‹ˆ๋ฉด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ฒ ์–ด? ๋ผ๊ณ  ์ƒ๊ฐํ• ์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์Œ, ๊ทธ๊ฑด this.state๊ฐ€ ํด๋ž˜์Šค์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ์—์š”. ์ด ํด๋ž˜์Šค ์‹คํ–‰์ด ์•„๋ž˜์˜ ์ฝ”๋“œ์™€ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ๊ณผ ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

hook๋“ค์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํด๋กœ์ €์— ์ •๋ง ๋งŽ์ด ์˜์กดํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ชจ์ˆœ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•˜์ง€๋งŒ ์บ๋…ธ๋‹ˆ์ปฌ ํƒ€์ž„์•„์›ƒ ํ˜ผ๋ž€์—์„œ์˜ ์ž˜๋ชป๋œ ๊ฐ’์œผ๋กœ ๊ณ ํ†ต๋ฐ›๋Š” ํด๋ž˜์Šค ์‹คํ–‰์ด์—์š”. ์ข…์ข… ํด๋กœ์ €์™€ ๊ด€๋ จ์ด ์žˆ๋Š”. ์ด ์˜ˆ์‹œ์—์„œ์˜ ํ˜ผ๋ž€์˜ ์‹ค์ œ ์›์ธ์€ ๋ณ€ํ˜•์ด๊ณ  ํด๋กœ์ € ๊ทธ ์ž์ฒด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๊ฐ€ ์ด ํด๋ž˜์Šค ์•ˆ์—์„œ์˜ this.state๊ฐ€ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ์ƒํƒœ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก this.state๋ฅผ ๋ณ€ํ˜•ํ–ˆ์–ด์š”.

ํด๋กœ์ €๋Š” ๋„ˆ๊ฐ€ ๋‹ซ์€ ๊ฐ’์ด ์ ˆ๋Œ€๋กœ ๋ฐ”๋€Œ์ง€ ์•Š์„ ๋•Œ ํ›Œ๋ฅญํ•˜์ฃ . ๊ทธ๊ฒƒ์€

๋ฆฌ์•กํŠธ์—๊ฒŒ ์˜์กด๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ ๊ฑฐ์ง“๋ง ํ•˜์ง€ ๋งˆ๋ผ

๋ฆฌ์•กํŠธ์—๊ฒŒ ์˜์กด๋ฐฐ์—ด์„ ์ œ๋Œ€๋กœ ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋‚˜์œ ๊ฒฐ๋ง์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ์ง๊ด€์ ์œผ๋กœ ๋ฌด์Šจ ๋ง์ธ์ง€ ์ดํ•ด๊ฐ€ ๋˜์‹œ์ฃ . ํ•˜์ง€๋งŒ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ์˜ ๋ฉ˜ํƒˆ๋ชจ๋ธ์„ ๊ฐ€์ง€๊ณ  ๊ฝค ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด useEffect๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ด ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜๋ ค๊ณ  ํ•˜์‹ญ๋‹ˆ๋‹ค. ์ €๋„ ์ฒ˜์Œ์—” ๊ทธ๋žฌ์–ด์š”.

๋งˆ์šดํŠธ ๋˜์—ˆ์„ ๋•Œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๊ณ ์š”? ์ด์ œ๋ถ€ํ„ฐ๋Š” ๊ธฐ์–ตํ•˜์„ธ์š”. ์˜์กด๋ฐฐ์—ด์„ ๋ช…์‹œํ•ด์ฃผ๋ฉด ์ดํŽ™ํŠธ์— ์˜ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ์˜ ๋ชจ๋“  ๊ฐ’๋“ค์€ ๊ฑฐ๊ธฐ ์žˆ์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. props, ์ƒํƒœ, ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•ด์„œ ์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ ์ „-๋ถ€ ๋‹ค์š”.

๋•Œ๋•Œ๋กœ ๋‹น์‹ ์ด ๊ทธ๋ ‡๊ฒŒ ํ•  ๋•Œ, ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค์ฃ . ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋ˆ๋‹ค๊ฑฐ๋‚˜, ์†Œ์ผ“์ด ๋„ˆ๋ฌด ์ž์ฃผ ์žฌ์ƒ์„ฑ ๋œ๋‹ค๊ฑฐ๋‚˜์š”. ๊ทธ๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์˜์กด ๋ฐฐ์—ด์„ ์ง€์šฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ์—์š”. ๊ณง ํ•ด๊ฒฐ์ฑ…์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ ๋” ์ž˜ ์ดํ•ดํ•ด ๋ณด์ž๊ตฌ์š”.

์˜์กด๋ฐฐ์—ด์ด ๊ฑฐ์ง“๋ง์„ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜

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

ํ•˜์ง€๋งŒ ์˜์กด๋ฐฐ์—ด์„ [] ์ด๋ ‡๊ฒŒ ๋ช…์‹œํ•œ๋‹ค๋ฉด, ์ƒˆ๋กœ์šด effect๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๊ฒ ์ฃ . ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ๋ฌธ์ œ๋Š” ๋ช…ํ™•ํžˆ ๋ณด์ด์ฃ . ํ•˜์ง€๋งŒ ์ง๊ด€์€ ์—ฌ๋Ÿฌ๋ถ„์„ ์†์—ฌ์š”. ํด๋ž˜์Šค solution์ด ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ธฐ์–ต ์†์—์„œ "ํŠ€์–ด ๋‚˜์˜ค๋Š”" ๋‹ค๋ฅธ ๊ฒฝ์šฐ์— ๋ง์ด์ฃ .

์˜ˆ๋ฅผ ๋“ค์–ด์„œ, ๋งค ์ดˆ๋งˆ๋‹ค ์นด์šดํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ํด๋ž˜์Šค๋กœ, ์šฐ๋ฆฌ์˜ ์ง๊ด€์€ "setInterval ํ•˜๊ณ , ๋‚˜์ค‘์— destory ํ•œ ๋ฒˆ ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฑฐ ์•„๋‹˜?" ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์ฃ . ํ•˜์ง€๋งŒ ์•„๋ž˜์˜ ์˜ˆ์‹œ๋ฅผ ๋ด…์‹œ๋‹ค? ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์— ์ด ์ฝ”๋“œ๋ฅผ useEffect๋กœ ๋ฒˆ์—ญํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ์ง๊ด€์ ์œผ๋กœ ์˜์กด๋ฐฐ์—ด์— ๋นˆ ๋ฐฐ์—ด์„ ์ง‘์–ด ๋„ฃ๊ฒ ์ฃ . ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋์œผ๋ฉด ํ•˜์ž–์•„์š”?

ํ•˜์ง€๋งŒ, ์ด ์˜ˆ์‹œ๋Š”์š”. ์ฆ๊ฐ€๋ฅผ ํ•œ ๋ฒˆ ๋ฐ–์— ์‹œํ‚ค์ง€ ์•Š์•„์š”.

๋‹น์‹ ์˜ ๋ฉ˜ํƒˆ๋ชจ๋ธ์ด '์˜์กด๋ฐฐ์—ด์€ ๋‚ด๊ฐ€ ์ด ์ดํŽ™ํŠธ๋ฅผ ์–ธ์ œ ๋‹ค์‹œ ์ด‰๋ฐœํ•  ์ง€ ๋ช…์‹œํ•˜๋„๋ก ํ•œ๋‹ค'๋ผ๋ฉด, ์ด ์˜ˆ์‹œ๋Š” ๋‹น์‹ ์—๊ฒŒ ์กด์žฌ์  ์œ„๊ธฐ๋ฅผ ์•ˆ๊ฒจ์ค„์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋„ค์š”. ๋‹น์‹ ์€ ์ด๊ฑธ ํ•œ ๋ฒˆ๋งŒ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ์‹ถ์—ˆ์ž–์•„์š”. ์ด๊ฑด Interval์ด๋‹ˆ๊นŒ์š”. ๊ทธ๋ž˜์„œ, ์™œ ์ด๊ฒŒ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฑฐ์ฃ ?

์˜์กด๋ฐฐ์—ด์€ ์ดํŽ™ํŠธ๊ฐ€ ๊ทธ ๋ Œ๋” ์Šค์ฝ”ํ”„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์•ˆ๋‹ค๋ฉด ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ดํŽ™ํŠธ๋Š” count ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์šฐ๋ฆฌ๊ฐ€ ์•ˆ ํ•œ๋‹ค๊ณ  ๊ฑฐ์ง“๋ง์„ ์นœ ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ . ์ด๊ฒŒ ์šฐ๋ฆฌ๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๋ฌธ์ œ์˜ˆ์š”. (์ด์ œ ๊ณง ๋‚˜์œ์ผ์ด ์ผ์–ด๋‚ ๊ฑฐ์˜ˆ์š”!!!)

์ฒซ ๋ฒˆ์งธ ๋ Œ๋”์—์„œ count์˜ ๊ฐ’์€ 0์ด์—์š”. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”์˜ ์ดํŽ™ํŠธ๋Š” setCount(0+1)์„ ์˜๋ฏธํ•˜์ฃ . ๋นˆ ์˜์กด๋ฐฐ์—ด ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” never ๋‹ค์‹œ ์ดํŽ™ํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ดํŽ™ํŠธ๋Š” ๊ณ„์†ํ•ด์„œ setCount(0+1)์„ ํ˜ธ์ถœ ํ•˜๋Š” ๊ฑฐ์˜ˆ์š” ๋งค ์ดˆ๋งˆ๋‹ค์š”!

์šฐ๋ฆฌ๊ฐ€ ๋ฆฌ์•กํŠธ์—๊ฒŒ ์šฐ๋ฆฌ ์ดํŽ™ํŠธ๊ฐ€ ์šฐ๋ฆฌ ์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ ์–ด๋–ค ๊ฐ’์—๋„ ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฑฐ์ง“๋ง์„ ํ–ˆ์–ด์š”. ์‹ค์ œ๋กœ๋Š” ์˜์กด ํ•˜๋Š”๋ฐ์š”.

์šฐ๋ฆฌ์˜ ์ดํŽ™ํŠธ๋Š” ์นด์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์š”. ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์กด์žฌํ•˜๋Š” ๊ฐ’์ด์ฃ . ํ•˜์ง€๋งŒ effect ๋ฐ–์— ์กด์žฌํ•ด์š”.

๊ทธ๋Ÿฌ๋ฏ€๋กœ, ์˜์กด ๋ฐฐ์—ด๋กœ ๋นˆ ๋ฐฐ์—ด์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์€ ๋ฒ„๊ทธ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ผ๊ฒ๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๋Š” ์˜์กด ๋ฐฐ์—ด์„ ๋น„๊ตํ•˜๊ณ  ์ด ์ดํŽ™ํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒƒ์„ ๊ฑด๋„ˆ ๋›ธ ๊ฒƒ์ด์—์š”.

์ด๋Ÿฌํ•œ ์ด์Šˆ๋“ค์€ ์ƒ๊ฐํ•˜๊ธฐ์— ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, effect ์˜์กด ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ ํ•ญ์ƒ ์†”์งํ•  ๊ฒƒ์„ ๊ฐ•๋ ฅํ•œ ๊ทœ์น™์œผ๋กœ์จ ์ฑ„ํƒํ•  ๊ฒƒ์„ ๊ถŒ๊ณ  ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” lint rule์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ํŒ€์„ ๊ฐ•ํ™”ํ•˜๊ธธ ์›ํ•˜์‹ ๋‹ค๋ฉด์š”.

์˜์กด ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์†”์งํ•ด์ง€๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

๋จผ์ € ์ผ๋ฐ˜์ ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ์ž‘๋“ค ํ•˜์‹ญ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘ ๋ฒˆ ์งธ ๊ฒƒ์„ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ ์šฉํ•˜์‹œ์ฃ .

์ฒซ ๋ฒˆ์งธ ์ „๋žต์€ ์˜์กด ๋ฐฐ์—ด์„ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์ดํŽ™ํŠธ ์•ˆ์—์„œ ์‚ฌ์šฉ๋œ ๋ชจ๋“  ๊ฐ’๋“ค์„ ํฌํ•จํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. count๋ฅผ ํฌํ•จํ•ด๋ด…์‹œ๋‹ค.

์˜์กด ๋ฐฐ์—ด์„ ์˜ณ๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์ด์ง€๋Š” ์•Š์„์ง€ ๋ชฐ๋ผ๋„์šฐ๋ฆฌ๊ฐ€ ๊ณ ์ณ์•ผํ–ˆ๋˜ ์ฒซ ๋ฒˆ์žฌ ์ด์Šˆ์˜€๋˜ ๊ฑฐ์ฃ . ์ด์ œ count๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ๊ฒƒ์€ ๋งค ๋ฒˆ ๋‹ค์Œ ์ธํ„ฐ๋ฒŒ์€ ๊ทธ๋•Œ์˜ ๋ Œ๋”์•ˆ์˜ setCount(count+1)๋กœ๋ถ€ํ„ฐ count๋ฅผ ์ฐธ์กฐํ•˜๋ฉด์„œ ์ดํŽ™ํŠธ๋ฅผ ์žฌ์‹คํ–‰ ์‹œํ‚ฌ๊ฒ๋‹ˆ๋‹ค.

๊ทธ๊ฑด ์•„๋งˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ฒ ์ง€๋งŒ, ์šฐ๋ฆฌ์˜ ์ธํ„ฐ๋ฒŒ์€ ์นด์šดํŠธ๊ฐ’์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ์ง€์›Œ์ง€๊ณ , ๋‹ค์‹œ ์„ค์ •๋˜๊ฒ ์ฃ . ์ œ๊ฐ€ ๋ณ„๋กœ ์›ํ•˜๋Š” ๋ฐฉ์‹์€ ์•„๋‹ˆ๋„ค์š”.

๋‘ ๋ฒˆ์งธ ์ „๋žต์€ ์šฐ๋ฆฌ์˜ ์ดํŽ™ํŠธ ์ฝ”๋“œ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋„ˆ๋ฌด ์ž์ฃผ ๋ณ€ํ•˜๋Š” ๊ฐ’์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. ์šฐ๋ฆฌ๋Š” ์˜์กด๋ฐฐ์—ด์— ๊ฑฐ์ง“๋ง์„ ํ•˜๊ณ ์‹ถ์ง€ ์•Š์•„์š”. ๊ทธ์ € ์šฐ๋ฆฌ์˜ ์ดํŽ™ํŠธ๊ฐ€ ๊ทธ ๊ฐ’๋“ค์„ ๋” ์ ๊ฒŒ ๊ฐ–๋„๋ก ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ ๋ฟ์ด์—์š”.

์˜์กด ๋ฐฐ์—ด์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ์ˆ ๋“ค์„ ์‚ดํŽด๋ด…์‹œ๋‹ค.

์ดํŽ™ํŠธ๋ฅผ ์ž๊ธ‰์ž์กฑํ•˜๋„๋ก ๋งŒ๋“ค์–ด๋ผ

์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ์˜ ์ดํŽ™ํŠธ ์•ˆ์—์„œ count์— ๋Œ€ํ•œ ์˜์กด์„ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ์–ด์š”.

๊ทธ๋Ÿฌ๋ ค๋ฉด, ์Šค์Šค๋กœ์—๊ฒŒ ๋ฌผ์–ด๋ด์•ผ๋ผ์š”. ์šฐ๋ฆฌ๊ฐ€ count๋ฅผ ๋ฌด์—‡์„ ์œ„ํ•ด์„œ ์“ฐ๊ณ  ์žˆ๋Š”๊ฐ€? ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋Ÿฌ ์˜ค์ง setCount๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ž–์•„์š”. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์šฐ๋ฆฐ ์‚ฌ์‹ค count๋ฅผ ์ด ์Šค์ฝ”ํ”„์—์„œ ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š๊ฑฐ๋“ ์š”. ์šฐ๋ฆฌ๊ฐ€ ์ด์ „ ์ƒํƒœ์— ๊ธฐ๋ฐ˜ํ•ด์„œ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ํ•จ์ˆ˜ํ˜• ์—…๋ฐ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ํ˜• ์—…๋ฐ์ดํŠธ๋„ ๋ง‰ ๊ทธ๋ ‡๊ฒŒ ์ข‹์ง€๋Š” ์•Š์•„์š”. ์กฐ๊ธˆ ์ด์ƒํ•ด๋ณด์ด๊ณ  ์‚ฌ์šฉ ๋ฒ”์œ„ ์ž์ฒด๋„ ๋งค์šฐ ์ œํ•œ์ ์ด์—์š”. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ๊ฐ’์ด ์„œ๋กœ์—๊ฒŒ ์˜์กดํ•˜๋Š” ๋‘๊ฐœ์˜ ์ƒํƒœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ˜น์€ ์šฐ๋ฆฌ๊ฐ€ ๋‹ค์Œ state๋ฅผ props์— ๊ธฐ๋ฐ˜ํ•ด์„œ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์ด ํ•จ์ˆ˜ํ˜• ์—…๋ฐ์ดํŠธ๊ฐ€ ๋„์›€์ด ๋˜์ง€ ์•Š์„ ๊ฑฐ์˜ˆ์š”. ๋‹คํ–‰ํžˆ๋„, ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜ํ˜• ์—…๋ฐ์ดํŠธ๋Š” ๊ฐ•๋ ฅํ•œ ์ž๋งค ํŒจํ„ด์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„ํ•˜์•ผ useReducer.

์•ก์…˜์œผ๋กœ๋ถ€ํ„ฐ ์—…๋ฐ์ดํŠธ ๋ถ„๋ฆฌํ•˜๊ธฐ

์•ž์„  ์˜ˆ์‹œ๋ฅผ ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋„๋ก ์ˆ˜์ •ํ•ด๋ด…์‹œ๋‹ค. ์นด์šดํŠธ์™€ ์Šคํ…. ์šฐ๋ฆฌ์˜ interval์€ ์นด์šดํŠธ๋ฅผ ์Šคํ… ์ธํ’‹ ๊ฐ’ ๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ฌ ๊ฒ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋ฐ˜์น™์„ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ๋ช…์‹ฌํ•˜์„ธ์š”. ์šฐ๋ฆฌ๊ฐ€ step์„ effect ์•ˆ์—์„œ ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ €๋Š” ์˜์กด๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•  ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•  ๊ฒ๋‹ˆ๋‹ค.

์ด ์˜ˆ์‹œ์—์„œ์˜ ํ˜„์žฌ ํ–‰๋™์€ ์Šคํ…์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์ธํ„ฐ๋ฒŒ์„ ์žฌ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์˜์กด ๋ฐฐ์—ด์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋‹ˆ๊นŒ์š”. ๊ทธ๋ฆฌ๊ณ  ๋งŽ์€ ๊ฒฝ์šฐ์— ๊ทธ๊ฒƒ์€ ์ •ํ™•ํžˆ ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ์ด์ฃ . ๋ฌธ์ œ๋  ๊ฒƒ์ด ์—†์–ด์š”. ์ดํŽ™ํŠธ๋ฅผ ์ชผ๊ฐœ๊ณ  ์ƒˆ๋กญ๊ฒŒ ์„ธํŒ…ํ•˜๋Š” ๊ฒƒ์—, ์šฐ๋ฆฌ๋Š” ํ”ผํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ ํ•ฉ๋‹นํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด์š”.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ์ธํ„ฐ๋ฒŒ์˜ ์‹œ๊ณ„๋ฅผ ์Šคํ…์˜ ๋ณ€ํ™”๋งˆ๋‹ค ๋ฆฌ์…‹์‹œํ‚ค๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค? ์šฐ๋ฆฌ์˜ ์ดํŽ™ํŠธ์—์„œ ์Šคํ… ์˜์กด์„ ์–ด๋–ป๊ฒŒ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์ฃ ?

์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ๋˜๋‹ค๋ฅธ ์ƒํƒœ ๋ณ€์ˆ˜์˜ ํ˜„์žฌ ๊ฐ’์— ์˜์กดํ•˜๋„๋ก ์„ธํŒ…ํ•  ๋•Œ์—๋Š” useReducer๋ฅผ ํ†ตํ•ด์„œ ๋‘˜ ๋‹ค ๊ต์ฒดํ•˜๋„๋ก ์‹œ๋„ํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ํ˜• setStateํ•จ์ˆ˜๋ฅผ ์“ฐ๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ ๋Œ€์‹  ๋ฆฌ๋“€์„œ๋ฅผ ์“ฐ๋„๋ก ๊ณ ๋ คํ•ด๋ณด๊ธฐ์— ์ข‹์€ ํƒ€์ด๋ฐ ์ž…๋‹ˆ๋‹ค. ๋ฆฌ๋“€์„œ๋Š” ๋„ˆ์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์ผ์–ด๋‚˜๋Š” ์•ก์…˜์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ๊ณผ ์ƒํƒœ๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๋ฐ˜์‘์œผ๋กœ ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ ๋˜์–ด์•ผ ํ• ์ง€๋ฅผ ๋ถ„๋ฆฌํ•˜๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

์Šคํ… ๋””ํŽœ๋˜์‹œ๋ฅผ ์šฐ๋ฆฌ์˜ ์ดํŽ™ํŠธ ์•ˆ์—์„œ ๋””์ŠคํŒจ์น˜ ๋””ํŽœ๋˜์‹œ๋กœ ๊ตํ™˜ํ•ด์ค์‹œ๋‹ค.

์ด๊ฒŒ ๋ญ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋” ์ข‹์€ ๊ฑด์ง€ ์งˆ๋ฌธํ•˜์‹ค ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ ๋Œ€๋‹ต์€ ๋ฆฌ์•กํŠธ๊ฐ€ ๋””์ŠคํŒจ์น˜ ํ•จ์ˆ˜๊ฐ€ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ ์ „์ฒด๋ฅผ ํ†ตํ‹€์–ด์„œ ์ƒ์ˆ˜์ด๋„๋ก ๋ณด์žฅํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์œ„์˜ ์˜ˆ์‹œ๋Š” ์ธํ„ฐ๋ฒŒ์„ ์žฌ ๊ตฌ๋…ํ•  ํ•„์š”๊ฐ€ ๋‹ค์‹œ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋„ค์š”!

์ดํŽ™ํŠธ ์•ˆ์˜ ์ƒํƒœ๋ฅผ ์ฝ๋Š” ๊ฒƒ ๋Œ€์‹ ์—, ์ดํŽ™ํŠธ๋Š” ๋ฌด์—‡์ด ์ผ์–ด๋‚ฌ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ•ด๋…ํ•˜๋Š” ์–ด๋–ค ์•ก์…˜์„ ๊ฐ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ์ดํŽ™ํŠธ๊ฐ€ ์Šคํ…œ ์ƒํƒœ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๋˜์–ด ์œ ์ง€๋  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ์ฃ . ์šฐ๋ฆฌ์˜ ์ดํŽ™ํŠธ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋Š” ๊ด€์‹ฌ ์—†์–ด์š”, ๊ทธ์ € ์šฐ๋ฆฌ์—๊ฒŒ ๋ฌด์—‡์ด ์ผ์–ด๋‚ฌ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์–˜๊ธฐํ•  ๋ฟ์ด์ฃ . ๊ทธ๋ฆฌ๊ณ  ๋ฆฌ๋“€์„œ๋Š” ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ centralize(์ค‘์•™์ง‘์ค‘ํ™”) ํ•ฉ๋‹ˆ๋‹ค.

Last updated