5-1.State

Ä«¿îÅÍ

ÄÄÆ÷³ÍÆ®°¡ µ¶¸³µÈ ºÎǰÀÌ µÇ·Á¸é ¿ÜºÎ¿¡¼­ Àü´ÞÇÏ´Â ¼Ó¼ºÀ» Ç¥½ÃÇÏ´Â °Í ¿Ü¿¡µµ ´Éµ¿ÀûÀÎ µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. À̸¦ À§ÇØ ´ÙÀ½ µÎ °¡Áö ´É·ÂÀÌ ´õ ÇÊ¿äÇÏ´Ù.

 

¢ºÀ̺¥Æ® ó¸® : »ç¿ëÀÚÀÇ Á¶ÀÛ¿¡ ¹ÝÀÀÇÏ¿© ´Éµ¿ÀûÀ¸·Î µ¿ÀÛÇØ¾ß ÇÑ´Ù.

¢º»óÅ ±â¾ï : »ç¿ëÀÚ°¡ ÀÔ·Â, Á¶ÀÛÇÑ ³»¿ëÀ» °è¼Ó À¯ÁöÇØ¾ß ÇÑ´Ù.

 

¿¹¸¦ µé¾î ¼îÇθôÀÇ »óǰ ÄÄÆ÷³ÍÆ®¶ó¸é »ç¿ëÀÚ°¡ Ŭ¸¯ÇÒ ¶§ À̺¥Æ®¸¦ ¹Þ¾Æ Àå¹Ù±¸´Ï·Î µé¾î°¡´Â µ¿ÀÛÀ» ÇØ¾ß ÇÑ´Ù. Çѹø Àå¹Ù±¸´Ï¿¡ ³Ö¾î ³õÀº »óǰÀº »© ³»Áö ¾Ê´Â ÇÑ ÀÚ½ÅÀÌ ¼±ÅùÞÀº »óŶó´Â °ÍÀ» ±â¾ïÇØ¾ß ÇÑ´Ù.

À̺¥Æ® Çڵ鷯¸¦ µî·ÏÇÏ´Â ¹æ¹ýÀº ¾Õ¿¡¼­µµ ÀÌ¹Ì ¿¹Á¦¸¦ ¸¸µé¾î º¸¾Ò´Âµ¥ °£´ÜÇÏ°Ô ¿ä¾àÇØ º¸ÀÚ. ´ÙÀ½ Çü½ÄÀ¸·Î Ŭ¸¯ À̺¥Æ®¸¦ ó¸®ÇÒ Çڵ鷯 ÇÔ¼ö¸¦ ÁöÁ¤ÇÑ´Ù. Çڵ鷯 ÁöÁ¤½Ã ¹Ýµå½Ã onClickÀ¸·Î ij¸Ö ÄÉÀ̽º·Î À̸§À» ÀÛ¼ºÇϰí ÇÔ¼ö È£Ãâ¹®ÀÌ ¾Æ´Ñ ÇÔ¼ö¸¦ Àü´ÞÇÑ´Ù.

 

onClick={Çڵ鷯 ÇÔ¼ö}

 

À̺¥Æ®´Â ´ÙÀ½¿¡ ´õ ÀÚ¼¼È÷ ¾Ë¾Æ º¸±â·Î ÇÏ°í ¿©±â¼­´Â »óŸ¦ ±â¾ïÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¿¬±¸ÇØ º¸ÀÚ. ´ÙÀ½ ¿¹Á¦´Â ¹öưÀ» Çϳª ¹èÄ¡Çϰí Ŭ¸¯ÇÒ ¶§¸¶´Ù Á¤¼ö°ªÀ» 1¾¿ Áõ°¡½ÃŰ´Â Ä«¿îÅÍÀÌ´Ù. ÄÄÆ÷³ÍÆ® À̸§Àº Counter·Î ºÙ¿´´Ù.

 

¿¹Á¦ : counter

function Counter() {

  console.log("Counter È£Ãâ")

  let count = 10

 

  function decrease() {

    count--;

    console.log("count = " + count)

  }

 

  function increase() {

    count++;

    console.log("count = " + count)

  }

 

  return (

    <>

      <h2>{count}</h2>

      <button onClick={decrease}>°¨¼Ò</button>&nbsp;

      <button onClick={increase}>Áõ°¡</button>

    </>

  )

}

 

 

function App() {

  return (

    <>

      <Counter />

  </>

  );

}

 

Ä«¿îÆ®°ªÀ» ÀúÀåÇÒ º¯¼ö¸¦ count·Î ¼±¾ðÇϰí 10À¸·Î ÃʱâÈ­Çß´Ù. ½ÇÇàÁß¿¡ º¯°æµÉ °ªÀ̹ǷΠ»ó¼ö(const)´Â ¾ÈµÇ°í º¯¼ö(let)¿©¾ß ÇÑ´Ù. <h2> ¿¤¸®¸ÕÆ®¾È¿¡ ÀÌ °ªÀ» Ãâ·ÂÇÏ°í µÎ ¹öưÀÇ ¤ÑnClick À̺¥Æ®¿¡ increase, decrease Çڵ鷯¸¦ ÁöÁ¤Çß´Ù.

µÎ ÇÔ¼ö¿¡¼­´Â count º¯¼ö¸¦ ++, --¿¬»êÀÚ·Î 1¾¿ Áõ°¨ÇÑ´Ù. ÀÌ ÇÔ¼ö°¡ ¾ðÁ¦ È£ÃâµÇ´ÂÁö È®ÀÎÇϱâ À§ÇØ ·Î±×¸¦ Âï°í Counter ÄÄÆ÷³ÍÆ® È£Ãâ½Ã¿¡µµ ·Î±×¸¦ Âï´Â´Ù. ¹öưÀ» ´©¸£¸é º¯¼ö°ªÀÌ ¹Ù²ð °ÍÀÌ´Ù. °ú¿¬ ±×·±Áö ÄܼÖâÀ» ¿­¾î ³õ°í ¹öưÀ» ´­·¯ º¸ÀÚ.

À¥ ÆäÀÌÁö¿¡ Ä«¿îÆ®ÀÇ ÃʱⰪÀÎ 10ÀÌ Ç¥½ÃµÇ°í ¾Æ·¡ÂÊ¿¡ ¹öưµµ Àß ¹èÄ¡µÇ¾î ÀÖ´Ù. ½ÇÇà Á÷ÈÄ¿¡ Counter ÄÄÆ÷³ÍÆ®°¡ È£ÃâµÇ´Âµ¥ ÀÌ µ¿ÀÛÀº ·£´õ¸µÀ» ÇÒ ¶§ µü Çѹø¸¸ ÀϾ´Ù. count°¡ Áö¿ª º¯¼öÀÓ¿¡µµ Çڵ鷯¿¡¼­ °ªÀ» À¯ÁöÇÏ´Â ÀÌÀ¯´Â Ŭ·ÎÀú·Î Áö¿ª º¯¼öÀÇ »ý¸íÀ» ¿¬ÀåÇϱ⠶§¹®ÀÌ´Ù. ¹öưÀ» ´©¸£¸é count º¯¼ö°¡ Áõ°¨ÇÏ´Â °ÍÀ» ·Î±×·Î È®ÀÎÇÒ ¼ö ÀÖ´Ù.

±×·¯³ª È­¸éÀÇ Ä«¿îÆ®´Â ¹Ù²îÁö ¾Ê´Â´Ù. ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â count º¯¼öÀÇ º¯È­°¡ ÆäÀÌÁö¸¦ ´Ù½Ã ±×·Á¾ß ÇÏ´Â º¯È­ÀÎÁö ¾Ë¼ö ¾ø±â ¶§¹®ÀÌ´Ù. increase ÇÔ¼ö´Â 1Áõ°¡ÇÏ°í ·Î±×¸¸ ÂïÀ» »Ó È­¸éÀ» ´Ù½Ã ·£´õ¸µÇÏÁö´Â ¾Ê´Â´Ù. ±×·¯´Ï ³»ºÎÀûÀ¸·Î º¯¼ö¸¸ Áõ°¡ÇÒ »Ó È­¸é¿¡´Â º¯È­°¡ ¾ø´Ù. Á¤ ÇÏ·Á¸é Ä«¿îÆ®°¡ ¹Ù²ð ¶§ DOMÀ» Á÷Á¢ Á¶ÀÛÇÏ´Â Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

 

function Counter() {

  console.log("Counter È£Ãâ")

  let count = 10

 

  function decrease() {

    count--;

    document.getElementById("cnt").innerText = count

    console.log("count = " + count)

  }

 

  function increase() {

    count++;

    document.getElementById("cnt").innerText = count

    console.log("count = " + count)

  }

 

  return (

    <>

      <h2 id="cnt">{count}</h2>

      <button onClick={decrease}>°¨¼Ò</button>&nbsp;

      <button onClick={increase}>Áõ°¡</button>

    </>

  )

}

 

 

function App() {

  return (

    <>

      <Counter />

  </>

  )

}

 

 

Ä«¿îÅ͸¦ Ãâ·ÂÇÏ´Â h2 ¿¤¸®¸ÕÆ®¸¦ ÂüÁ¶Çϱâ À§ÇØ cnt id¸¦ ºÎ¿©Çß´Ù. count º¯¼ö¸¦ Áõ°¨ÇÒ ¶§ cnt ³ëµå¸¦ ã¾Æ innerText ¼Ó¼º¿¡ ÇöÀç°ªÀ» ´ëÀÔÇÑ´Ù. ¹öưÀ» ´©¸¦ ¶§¸¶´Ù ³»ºÎ º¯¼ö´Â ¹°·ÐÀ̰í È­¸éÀÇ Ä«¿îÆ®µµ °»½ÅµÈ´Ù.

°ú°Å¿¡´Â ½ÇÁ¦ ÀÌ·± ½ÄÀ¸·Î À¥ ÆäÀÌÁö¸¦ Á¦¾îÇßÀ¸¸ç Áö±Ýµµ °£´ÜÇÑ ÀÛ¾÷Àº ÀÌ ¹æ¹ýÀ» ¾´´Ù. ±×·¯³ª º¸´Ù½ÃÇÇ ¶È°°Àº 󸮸¦ µÎ ±ºµ¥¼­ Çϰí ÀÖ¾î ¹Ýº¹ÀÌ ½ÉÇϰí ÀÏÀÏÀÌ ¼öÀÛ¾÷À¸·Î ¹Ù²Ù´Â ½ÄÀ̶ó ÄÚµå¾çµµ ¸¹´Ù. °Ô´Ù°¡ DOMÀ» Á÷Á¢ Á¶ÀÛÇϱ⠶§¹®¿¡ ¼Óµµµµ ´À¸®°í È­¸éÀ» °è¼Ó ±×¸®¸é Ãâ·Â ǰÁúµµ ³ªºüÁø´Ù. ´õ ÁÁÀº ¹æ¹ýÀÌ ÇÊ¿äÇÏ´Ù.

useState

»ç¿ëÀÚ°¡ ÄÄÆ÷³ÍÆ®¸¦ Á¶ÀÛÇÏ¸é ³»ºÎ Á¤º¸¿¡ º¯È­°¡ ¹ß»ýÇÑ´Ù. ÀÌó·³ ÄÄÆ÷³ÍÆ®ÀÇ ¸ð¾ç°ú µ¿ÀÛ¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â ³»ºÎ Á¤º¸¸¦ »óÅÂ(State)¶ó°í ÇÑ´Ù. »óÅ´ °ªÀ» ¿µ±¸È÷ ÀúÀåÇÏ¸ç °ªÀÌ ¹Ù²î´Â Áï½Ã ·£´õ¸µÀ» ´Ù½Ã ÇÏ¿© È­¸é¿¡ ¹Ý¿µÇÑ´Ù.

Ä«¿îÅÍ ¿¹Á¦¿¡¼­´Â ÇöÀç Ä«¿îÆ®°ªÀÎ count°¡ »óÅÂÀÌ´Ù. »ç¿ëÀÚÀÇ Á¶ÀÛ¿¡ ¹ÝÀÀÇÏ¿© °ªÀÌ ¹Ù²î¸ç È­¸é¿¡µµ Áï½Ã ¹Ý¿µÇØ¾ß ÇÑ´Ù. ¾Õ ¿¹Á¦´Â count¸¦ ´Ü¼ø º¯¼ö·Î ¼±¾ðÇ߱⠶§¹®¿¡ °ªÀÌ ¹Ù²î¾îµµ È­¸é¿¡ ³ªÅ¸³ªÁö ¾Ê¾Ò´Ù. ´ÙÀ½ ¿¹Á¦´Â count¸¦ »óÅ·ΠÁ¤ÀÇÇÑ´Ù.

 

¿¹Á¦ : counterState

import {useState} from 'react';

 

function Counter() {

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

 

  function decrease() {

    setCount(count - 1)

  }

 

  function increase() {

    setCount(count + 1)

  }

 

  return (

    <>

      <h2>{count}</h2>

      <button onClick={decrease}>°¨¼Ò</button>&nbsp;

      <button onClick={increase}>Áõ°¡</button>

    </>

  )

}

 

function App() {

  return (

    <>

      <Counter />

  </>

  )

}

 

»óÅ Á¤ÀǸ¦ À§ÇØ useStateÈÅÀ» »ç¿ëÇϸç À̸¦ À§ÇØ import {useState} from 'react'; ¼±¾ðÀ» Çß´Ù. ÀÌ ¼±¾ð¾øÀÌ React.useState¶ó°í Àû¾îµµ µÇÁö¸¸ ¸Å¹ø ±×·¯±â´Â ±ÍÂúÀ¸¹Ç·Î ÀÓÆ÷Æ®¸¦ ÇÏ°í ¾²´Â °ÍÀÌ Æí¸®ÇÏ´Ù. ÀÌÈÄÀÇ ¿¹Á¦´Â useState¸¦ ÀÓÆ÷Æ®ÇÑ °ÍÀ¸·Î °¡Á¤ÇÑ´Ù.

º¯¼ö ¼±¾ð¹®ÀÌ useState·Î ¹Ù²î¾ú°í Áõ°¨ ÇÔ¼ö´Â setCount ÇÔ¼ö·Î Ä«¿îÆ®¸¦ Á¶ÀÛÇÑ´Ù. ·Î±×´Â È£Ãâ ½ÃÁ¡À» ÀÌ¹Ì ÆÄ¾ÇÇßÀ¸¹Ç·Î Á¦¿ÜÇß´Ù. »óÅ·ΠÁ¤ÀÇÇßÀ¸¹Ç·Î DOMÀ» Á÷Á¢ Á¶ÀÛÇÏÁö ¾Ê¾Æµµ ¹öưÀ» ´©¸¦ ¶§ Ä«¿îÆ®°¡ Àß Áõ°¨ÇÑ´Ù. »óŰªÀÌ Àß À¯ÁöµÇ°í ¹Ù²ð ¶§¸¶´Ù ·£´õ¸µµµ Áï½Ã ¼öÇàÇÑ´Ù.

»óŸ¦ Á¤ÀÇÇÒ ¶§´Â useState ÇÔ¼ö¸¦ »ç¿ëÇϸç Àμö·Î ÃʱⰪÀ» Àü´ÞÇÑ´Ù. ¸®¾×Æ®´Â ÃʱⰪÀÇ Å¸ÀÔ¿¡ ¸Â´Â ³»ºÎ º¯¼ö¿Í º¯¼ö¸¦ º¯°æÇÏ´Â ÇÔ¼ö¸¦ »ý¼ºÇϰí ÀÌ µÑÀ» ¹è¿­·Î ¹­¾î ¸®ÅÏÇÑ´Ù. ¸®ÅÏÇÑ º¯¼ö¿Í ÇÔ¼ö¸¦ ¹è¿­·Î ºÐÇØÇÏ¿© ´ëÀԹ޴´Ù. ¸®¾×Æ® Ãʺ¸ÀÚ¿¡°Ô »ý¼ÒÇÏ°í ¾î·Á¿î ¹®ÀåÀ̾ Àß ºÐ¼®ÇØ º¸°í ¿ÏÀüÈ÷ ÀÌÇØÇØ¾ß ÇÑ´Ù.

¾î¶² »óŵç ÃʱⰪÀº ÀÖ¾î¾ß ÇϹǷΠÀμö·Î ±× °ªÀ» ÁöÁ¤Çϴµ¥ À§ ¿¹Á¦´Â Á¤¼ö 10À» Àü´ÞÇß´Ù. useState´Â Á¤¼öÇü »óÅ º¯¼ö¸¦ »ý¼ºÇϰí 10À¸·Î ÃʱâÈ­ÇÑ´Ù. ±×¸®°í ±× º¯¼öÀÇ °ªÀ» º¯°æÇÏ´Â ÇÔ¼öµµ °°ÀÌ ¸¸µç´Ù. Çѹø¿¡ µÎ °³ÀÇ °ªÀ» ¸®ÅÏÇÒ ¼ö ¾øÀ¸¹Ç·Î º¯¼ö¿Í ÇÔ¼ö¸¦ ¹è¿­·Î ¹­¾î ¸®ÅÏÇϸç ÄÄÆ÷³ÍÆ®´Â ÀÌ µÑÀ» °¢°¢ÀÇ º¯¼ö·Î ´ëÀԹ޴´Ù.

[count, setCount] = useState(10)¸¦ ¿ÏÀüÈ÷ ¸»·Î Ç®¾î º¸¸é ÀÌ·¸´Ù. Á¤¼öÇü »óŰ¡ ÇÊ¿äÇѵ¥ ÃʱⰪÀ» 10À¸·Î ÇØ Áà. ±× °ªÀ» ÀúÀåÇÒ º¯¼öÀÇ À̸§Àº count·Î ÇÏ°í »óŸ¦ º¯°æÇÏ´Â ÇÔ¼ö´Â setCount·Î ÇØ Áà. ÀÌ·¸°Ô µÈ´Ù. ÀÌÈÄ Äڵ忡¼­´Â {count} Ç¥Çö½ÄÀ¸·Î Ä«¿îÆ® »óŸ¦ Ãâ·ÂÇϰí setCount ÇÔ¼ö·Î count »óŸ¦ ¹Ù²Û´Ù.

ÀÌ Äڵ忡¼­ ÃʱⰪ 10Àº ÀÓÀÇÀûÀ̸ç 0À̳ª 100 µî ¿øÇϴ´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¶Ç º¯¼öÀÇ À̸§À̳ª ÇÔ¼öÀÇ À̸§µµ useState°¡ °áÁ¤ÇÏ´Â °Ô ¾Æ´Ï°í ´ëÀÔ¹ÞÀ» ¶§ »ç¿ëÀÚ°¡ ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù. »óÅ A¿¡ ´ëÇØ º¯¼ö´Â a·Î, º¯°æ ÇÔ¼ö´Â setA·Î À̸§À» Áþ´Â °ÍÀÌ °ü·Ê¶ó count, setCount·Î ¹«³­ÇÏ°Ô À̸§À» ºÙ¿´Áö¸¸ ¾Æ¹« À̸§À̳ª ºÙ¿©µµ »ó°ü¾ø´Ù.

 

const [°³¼ö, ¹Ù²ã] = useState(88);

 

function decrease() {

  ¹Ù²ã(°³¼ö - 1)

}

....

 

useState´Â ¸®¾×Æ®ÀÇ ÇÔ¼ö¶ó ÀÌ Ã¶ÀÚ´ë·Î Àû¾î¾ß ÇÏ°í »óÅ º¯¼ö¿Í º¯°æ ÇÔ¼ö´Â »ç¿ëÀÚ°¡ À̸§À» ºÙÀÌ´Â °ÍÀÌ´Ù. µÎ °³ÀÇ °ªÀ» ¹è¿­·Î ¹Þ¾Æ ºÐÇØ ´ëÀÔÇÏ´Ï ¾î·Á¿ö º¸ÀÏ »Ó º¯¼ö ¼±¾ð¹®°ú ´ëÀÔ¹®ÀÏ »ÓÀÌ´Ù. »ç¿ëÀÚ ¸íĪÀÓÀ» È®ÀÎÇϱâ À§ÇØ Çѱ۷ΠÀ̸§À» ºÙ¿© ºÃ´Âµ¥ °üÇà´ë·Î À̸§À» Áþ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.

»óÅ º¯¼öÀÇ Å¸ÀÔÀº ÃʱⰪÀÇ Å¸ÀÔÀ» µû¸¥´Ù. count´Â ÃʱⰪÀ» 10À¸·Î ÁöÁ¤ÇßÀ¸´Ï ¼ýÀÚÇüÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. ŸÀÔÀ» ¸íÈ®È÷ ÁöÁ¤ÇÏ·Á¸é ÇÔ¼ö À̸§ µÚ¿¡ <number> Á¦³×¸¯À» ºÙ¿© ¼ýÀÚ Å¸ÀÔÀÓÀ» ¸í½ÃÇÑ´Ù.

 

const [count, setCount] = useState<number>(10);

 

ŸÀÔÀ» ¹àÇô µÎ¸é À߸øµÈ ŸÀÔÀÇ °ªÀ» ´ëÀÔÇÒ ¶§ °æ°í¸¦ º¸¿© ÁÖ¸ç ºôµå ´Ü°è¿¡¼­´Â ¿¡·¯·Î ó¸®ÇÏ¿© ½Ç¼ö¸¦ ¹æÁöÇÑ´Ù. ¶Ç, ¼ýÀÚÇüÀÎÁö ÀÌ¹Ì ¾Ë°í ÀÖÀ¸¹Ç·Î ÀÎÅÚ¸®¼¾½ºµµ ´õ Áö´ÉÀûÀ¸·Î µ¿ÀÛÇØ ŸÀÔ¿¡ µü ¸Â´Â ¸Þ¼­µå¸¸ º¸¿©ÁØ´Ù.

  

°³¹ß ¸ðµå¿¡¼­´Â °æ°í¸¸ ¹ß»ýÇÒ »Ó ½ÇÇàÀº µÈ´Ù. ºôµå ¸ðµå¿¡¼­´Â ÀáÀçÀûÀÎ »ç°í¸¦ ¹æÁöÇØ ÁÖ´Â ºÐ¸íÇÑ ÀÌÁ¡ÀÌ ÀÖ¾î ŸÀÔÀ» °¡±ÞÀû ¹àÈ÷±â¸¦ ±ÇÀåÇÑ´Ù. ƯÈ÷ º¹ÀâÇÑ °´Ã¼ ŸÀÔÀº ¸â¹öÀÇ Å¸ÀÔ±îÁö Á¡°ËÇÒ ¼ö ÀÖ¾î Å« µµ¿òÀÌ µÈ´Ù. ±×·¯³ª ¼ýÀÚ³ª ¹®ÀÚ¿­ Á¤µµÀÇ ´Ü¼ø ŸÀÔÀº ÃʱⰪÀ¸·ÎºÎÅÍ Å¸ÀÔ À¯Ãß°¡ °¡´ÉÇØ ±»ÀÌ ÀÌ·² ÇÊ¿ä±îÁö´Â ¾ø´Ù. ¶Ç ÇнÀÁß¿¡´Â ¹ø°Å·Ó°í °¡µ¶¼ºÀÌ ¶³¾îÁ® ÀÌ Ã¥Àº ŸÀÔÀ» »ý·«ÇÑ´Ù.

´ÙÀ½Àº Áõ°¨ ÇÔ¼ö¸¦ ºÐ¼®ÇØ º¸ÀÚ. µÎ ÇÔ¼ö´Â Áõ°¨ ¹öưÀÇ onClick À̺¥Æ®¿¡ ¿¬°áµÇ¾î ÀÖÀ¸¸ç ¹öưÀ» ´©¸¦ ¶§¸¶´Ù »óŰªÀ» 1¾¿ Áõ°¨½ÃŰ´Â µ¿ÀÛÀ» ó¸®ÇÑ´Ù. Àб⠽±°Ô ÆòÀÌÇÑ ÇÔ¼ö·Î Á¤ÀÇÇߴµ¥ È­»ìÇ¥ ÇÔ¼ö·Î ¾²¸é ÇÑÁÙ·Î °£´ÜÈ÷ ÁÙÀÏ ¼ö ÀÖ´Ù.

 

  const decrease = () => setCount(count - 1)

  const increase = () =>  setCount(count + 1)

 

ÇÑÁÙ·Î ¾ÐÃàÇßÀ» »Ó ÇÔ¼öÀÇ µ¿ÀÛÀº °°´Ù. onClick¿¡ ÇÔ¼ö¸¦ ÁöÁ¤ÇØ¾ß ÇÏ´Ï ÇÔ¼ö¿¡ ´ëÇÑ À̸§Àº ºÙ¿´´Ù. À̺¥Æ® Çڵ鷯´Â ´Ù¸¥ °÷¿¡¼­ È£ÃâÇÒ ÀÏÀÌ ¾øÀ¸¹Ç·Î ¾Æ¿¹ onClick ÁöÁ¤¹®¾È¿¡ È­»ìÇ¥ ÇÔ¼ö·Î ¹Ù·Î ½á ¹ö·Áµµ µÈ´Ù.

 

<button onClick={() => setCount(count - 1)}>°¨¼Ò</button>&nbsp;

<button onClick={() =>  setCount(count + 1)}>Áõ°¡</button>

 

µ¿ÀÛÀº ¿Ïº®ÇÏ°Ô ¶È°°°í ¼º´É»óÀÇ Â÷À̵µ ¾ø´Ù. ÀÌ·¸°Ô µÇ¸é À̸§À» ÁÙ Çʿ䵵 ¾ø´Ù. È­»ìÇ¥ ÇÔ¼ö ´ë½Å ÇÔ¼ö ¸®ÅÍ·²·Î ÀÛ¼ºÇصµ À͸íÇÔ¼ö¶ó´Â Á¡Àº °°´Ù.

 

<button onClick={function() {setCount(count - 1)}}>°¨¼Ò</button>&nbsp;

<button onClick={function() {setCount(count + 1)}}>Áõ°¡</button>

 

½Ç¹«¿¡¼­´Â °£·«ÇÑ Ç¥±â¹ýÀÌ Âª°í ¼Õ°¡¶ôµµ ´ú ÇǰïÇØ ÀÌ·± Äڵ带 Áñ°Ü ¾´´Ù. ±×·¯³ª Ãʺ¸ÀÚ°¡ º¸±â¿¡ ´«¿¡ ½ï µé¾î¿À´Â ÄÚµå´Â ¾Æ´Ï¸ç Çò°¥¸°´Ù. ¿¹Á¦´Â ÇнÀ¿ëÀ̹ǷΠÀÌ·± °úµµÇÑ ¾ÐÃàÀº ÀÚÀçÇÏ°í °¡±ÞÀû Àб⠽±°Ô ÀÛ¼ºÇÑ´Ù. ½Ç¹«¿¡¼­ ÀÌ·± ¾ÐÃàµÈ Äڵ带 º¸¸é ¿ø·¡ Äڵ尡 ¹¹¿´´ÂÁö Ç®¾î¼­ »ý°¢ÇØ º¸ÀÚ.

´ÙÀ½Àº ÇÔ¼ö ¾ÈÀÇ Äڵ带 º¸ÀÚ. increase´Â setCount(count + 1)·Î countÀÇ ¿ø·¡°ª¿¡ 1À» ´õÇÑ °ªÀ» count¿¡ ´ëÀÔÇÏ¿© 1 Áõ°¡½ÃŲ´Ù. ÀÌ°Ç °á±¹ count++°ú °°Àº ¼ÀÀÌ´Ù. °ú¿¬ ±×·±Áö µÎ ÇÔ¼öÀÇ º»Ã¼¸¦ ¹Ù²ã º¯¼ö°ªÀ» Áõ°¨½ÃÄÑ º¸ÀÚ. count¸¦ Á÷Á¢ ¹Ù²Ù¹Ç·Î ´ëÀÔ¹ÞÀ» ¶§µµ const°¡ ¾Æ´Ñ letÀ¸·Î ¹Þ¾Æ¾ß Çϸç È£ÃâÀ» È®ÀÎÇϱâ À§ÇØ ·Î±×µµ Âï¾î º¸¾Ò´Ù.

 

function Counter() {

  let [count, setCount] = useState(10);

 

  function decrease() {

    count--

    console.log("count = " + count)

  }

 

  function increase() {

    count++

    console.log("count = " + count)   

  }

 

½ÇÇàÇØ¼­ ·Î±×¸¦ »ìÆì º¸¸é count°ªÀÌ Á¤»óÀûÀ¸·Î Àß Áõ°¨ÇÑ´Ù. ±×·¯³ª ÆäÀÌÁö°¡ °»½ÅµÇÁö ¾Ê´Â´Ù. count´Â ´Ü¼øÇÑ º¯¼öÀÏ »ÓÀ̰í ÀÌ °ªÀÌ ¹Ù²î¾ú´Ù°í ÇØ¼­ ·£´õ¸µÀ» ´Ù½Ã ÇÏÁö´Â ¾Ê´Â´Ù. ½ºÅ©¸³Æ®¿¡ º¯¼ö´Â ¼ö½Ê, ¼ö¹é°³°¡ ÀÖÀ» ¼ö Àִµ¥ ¾î¶² º¯¼ö°¡ È­¸é¿¡ ¿µÇâÀ» ¹ÌÄ¡´ÂÁö ¸®¾×Æ®°¡ Á¤È®È÷ ÆÇ´ÜÇÒ ¼ö ¾ø´Ù.

¸®¾×Æ®¿¡°Ô ÀÌ º¯È­°¡ È­¸é¿¡ ¹Ý¿µµÇ¾î¾ß ÇÔÀ» ¸íÈ®È÷ ¾Ë·Á ÁÖ¾î¾ß ²À ÇÊ¿äÇÒ ¶§¸¸ È­¸éÀ» Àì½Î°Ô °»½ÅÇÒ ¼ö ÀÖ´Ù. ±× ¿ªÇÒÀ» ÇÏ´Â ÇÔ¼ö°¡ ¹Ù·Î setCountÀÌ´Ù. useState°¡ ÀÌ ÇÔ¼ö¸¦ »ý¼ºÇÒ ¶§ºÎÅÍ »óÅ º¯°æ½Ã ·£´õ¸µÀ» ´Ù½Ã ÇÏ´Â Äڵ带 ÀÌ¹Ì ÀÛ¼ºÇØ ³õ¾Ò´Ù.

±×·¡¼­ »óÅ º¯¼ö¸¦ Á÷Á¢ ¹Ù²Ù¾î¼­´Â ¾ÈµÇ¸ç Ç×»ó º¯°æ ÇÔ¼ö¸¦ ÅëÇØ¾ß ÇÑ´Ù. count¸¦ º¯°æÇÒ ¶§´Â ¹Ýµå½Ã setCount ÇÔ¼ö¸¦ È£ÃâÇØ¾ß Çϸç count´Â »ç¿ëÀÚ Äڵ忡¼­ ÇöÀç »óŰªÀ» Àб⸸ ÇÏ´Â Àбâ Àü¿ëÀÌ´Ù. ±×·¡¼­ ¾ÖÃÊ¿¡ º¯¼ö¿Í ÇÔ¼ö¸¦ ´ëÀÔ¹ÞÀ» ¶§ const·Î ¹Þ´Â °ÍÀÌ´Ù. ´ÙÀ½ »óŰ¡ ¹Ù²ð ¶§±îÁö count´Â »ó¼öÀÌ´Ù.

»óŸ¦ ¸¸µé°í »ç¿ëÇÏ´Â°Ô °£´ÜÇÏÁö´Â ¾ÊÁö¸¸ Á¤ÇüÈ­µÇ¾î ÀÖ´Ù. ÀÌ ±ÔÄ¢À» Àß Áö۰í Àß µû¶óÇØ¾ß ÇÑ´Ù. ¶óÀ̺귯¸®´Â ¾à¼ÓÀ» Áöų ¶§ Á¦´ë·Î ¼­ºñ½ºÇØ ÁØ´Ù.

ºñµ¿±â »óÅ °»½Å

°ªÀ» °è»êÇÒ ¶§ Çѹø¿¡ ÇÏ´Â°Ô °£´ÜÇÏÁö¸¸ È帧»ó ¿©·¯¹ø ³ª´©¾î ÇØ¾ßÇÒ ¶§°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î ¿ù±ÞÀ» °è»êÇÒ ¶§´Â ±âº»±Þ »Ó¸¸ ¾Æ´Ï¶ó Àܾ÷ ½Ã°£¿¡ µû¸¥ Ãʰú¼ö´çÀ» °è»êÇØ¾ß ÇÏ°í ±Ù¹« Àϼö¿¡ µû¶ó À¯ÈÞ ¼ö´çÀ» Áö±ÞÇÏ´Â µî ¿©·¯ ¿äÀÎÀÌ ÀÖ´Ù. ÀÌ·² ¶§´Â Á¶°Ç¿¡ µû¶ó °¢°¢ ó¸®ÇÏ´Â°Ô °£ÆíÇÏ´Ù.

 

¿ù±Þ = ±âº»±Þ

if (Àܾ÷ ÇßÀ¸¸é) ¿ù±Þ += Ãʰú±Ù¹«¼ö´ç

if (±Ù¹« Àϼö ä¿üÀ¸¸é) ¿ù±Þ += À¯ÈÞ ¼ö´ç

....

 

ÄÄÆ÷³ÍÆ®ÀÇ »óŵµ °°Àº ÇÔ¼ö ³»¿¡¼­ ÀÏ´Ü ¹Ù²å´Ù°¡ Á¶°Ç Á¡°Ë ÈÄ ´Ù½Ã ¹Ù²Ù´Â °æ¿ì°¡ Á¾Á¾ ÀÖ´Ù. ±×·¯³ª »óÅ´ ´Ü¼ø º¯¼ö°¡ ¾Æ´Ï¾î¼­ ¿©·¯ ¹ø Á¶ÀÛÇÏ¸é ºÎÀÛ¿ëÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î Ä«¿îÆ®¸¦ Áõ°¡½ÃŲ ÈÄ ÀÏÁ¤ Á¶°ÇÀÌ µÇ¸é Çϳª ´õ Áõ°¡½ÃŲ´Ù°í ÇØ º¸ÀÚ.

 

  function increase() {

    setCount(count + 1)

    if (true) {

      setCount(count + 1)

    }

  }

 

Å×½ºÆ® ÄÚµå´Â Á¶°ÇÀÌ Ç×»ó trueÀ̹ǷΠī¿îÆ®°¡ 2 Áõ°¡ÇØ¾ß ÇÑ´Ù. °ú¿¬ ÀÌ Äڵ尡 Àß µ¿ÀÛÇÏ´ÂÁö Å×½ºÆ®ÇØ º¸¸é ¿øÇϴ´ë·Î µ¿ÀÛÇÏÁö ¾Ê°í Ç×»ó 1¾¿¸¸ Áõ°¡ÇÑ´Ù. if Á¶°Ç¹®ÀÌ ¾ø¾îµµ, setCount¸¸ ¿©·¯¹ø ¹Ýº¹Çصµ ¸¶Âù°¡ÁöÀÌ´Ù.

 

  function increase() {

    setCount(count + 1)

    setCount(count + 1)

    setCount(count + 1)

  }

 

ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â ¸®¾×Æ®°¡ »óŸ¦ ºñµ¿±âÀûÀ¸·Î °»½ÅÇϱ⠶§¹®ÀÌ´Ù. º¯°æ ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§¸¶´Ù °ªÀ» Áï½Ã °»½ÅÇÏ°í ·£´õ¸µÇÏ¸é °¡»ó DOMÀ» ¾²´Â ÀÌÁ¡ÀÌ ¾øÀ¸¹Ç·Î °»½ÅÇϰڴٴ »ç½Ç¸¸ ±â·ÏÇØ µÎ¾ú´Ù°¡ ¸®ÅÏÇϱâ Àü¿¡ ÇѲ¨¹ø¿¡ °»½ÅÇÏ´Â°Ô À¯¸®ÇÏ´Ù.

setCount(count + 1)Àº ·£´õ¸µÀ» À¯¹ßÇÒ »Ó count¸¦ Áï½Ã º¯°æÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. count°¡ 10ÀÎ »óÅ¿¡¼­ ù setCount È£Ãâ½Ã ÇöÀç count °ª¿¡ 1 ´õÇÑ °ª, Áï 11·Î °»½ÅÇØ¾ß ÇÔÀ» ±â·ÏÇÑ´Ù. Áغñ¸¸ ÇÒ »Ó ½ÇÁ¦ count°¡ Áõ°¡ÇÑ °ÍÀº ¾Æ´Ï´Ù. count´Â letÀÌ ¾Æ´Ñ const·Î ¼±¾ðÇÑ »ó¼ö¿©¼­ ¹Ù²ð ¼öµµ ¾ø´Ù. µÎ¹øÂ° setCount¸¦ È£ÃâÇÒ ¶§µµ ¸¶Âù°¡ÁöÀÌ´Ù.

 

setCount(count + 1)      -> ÇöÀç°ª 10¿¡ 1À» ´õÇÑ´Ù.

if (true) {

  setCount(count + 1) -> ÇöÀç°ª 10¿¡ 1À» ´õÇÑ´Ù.

}

 

À̶§µµ count´Â ¾ÆÁ÷ ÀÌÀü °ªÀÎ 10À̹ǷΠ¿©ÀüÈ÷ 11·Î °»½ÅÇØ¾ß ÇÔÀ» ±â·ÏÇÑ´Ù. count¿¡ 11À» µÎ ¹ø ´ëÀÔÇØ ºÁ¾ß ¿©ÀüÈ÷ 11À̹ǷΠ1¸¸ Áõ°¡ÇÏ´Â °ÍÀÌ´Ù. Á¤ 2¹ø Áõ°¡½ÃŰ·Á¸é °ªÀ» °»½ÅÇÏ´Â ¾÷µ¥ÀÌÆ® ÇÔ¼ö¸¦ Àü´ÞÇÑ´Ù. º¸Åë a => a¿¬»ê½Ä ÇüÅÂÀÇ È­»ìÇ¥ ÇÔ¼ö·Î ª°Ô ¾´´Ù. ´ÙÀ½ ÄÚµå´Â Ä«¿îÆ®°¡ 2¾¿ Áõ°¨ÇÑ´Ù.

 

function Counter() {

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

 

  function decrease() {

    setCount(c => c - 1)

    if (true) {

      setCount(c => c - 1)

    }

  }

 

  function increase() {

    setCount(c => c + 1)

    if (true) {

      setCount(c => c + 1)

    } 

  }

 

  return (

    <>

      <h2>{count}</h2>

      <button onClick={decrease}>°¨¼Ò</button>&nbsp;

      <button onClick={increase}>Áõ°¡</button>

    </>

  )

}

 

function App() {

  return (

    <>

      <Counter />

    </>

  )

}

 

ÇÔ¼öµµ Áï½Ã ½ÇÇàµÇÁö ¾Ê´Â Á¡Àº °°À¸¸ç ´ë±â¿­¿¡ Â÷°îÂ÷°î ½×¾Æ¸¸ µÐ´Ù. ±×·¯³ª ´ë±â¿­¿¡¼­ ²¨³» Çϳª¾¿ ½ÇÇàÇÒ ¶§´Â Ç×»ó Àμö·Î ¹ÞÀº ÇöÀç°ªÀ» ±âÁØÀ¸·Î µ¿ÀÛÇϹǷΠ´ëÀÔ¹®°ú´Â ´Þ¸® ºñµ¿±âÀûÀ¸·Î ¿©·¯¹ø ½ÇÇàÇÏ´õ¶óµµ °¢°¢ÀÇ È¿°ú¸¦ ³½´Ù.

setCount°¡ È£ÃâÇÏ´Â À͸í ÇÔ¼öÀÇ Àμö c¿¡ ´ëÀԵǴ count´Â ÇÔ¼ö È£Ãâ ½ÃÁ¡ÀÇ °ªÀÌ´Ù. ù È£Ãâ¿¡¼­ 10¿¡ 1À» ´õÇÑ 11ÀÌ µÇ¾ú´Ù°¡ ´ÙÀ½ È£Ãâ¿¡¼­ 11¿¡ 1À» ´õÇÑ 12°¡ µÈ´Ù. ÇϳªÀÇ »óŸ¦ ¿©·¯¹ø ¹Ù²Ü ¶§ »Ó¸¸ ¾Æ´Ï¶ó ¿©·¯ »óŸ¦ ÇѲ¨¹ø¿¡ ¹Ù²Ü ¶§, ƯÈ÷ »óŰª³¢¸® ¼­·Î ÂüÁ¶ÇÒ ¶§µµ ÀÌ·± Ư¼ºÀ» ÁÖÀÇÇØ¾ß ÇÑ´Ù.

ÄÄÆ÷³ÍÆ®º° »óÅÂ

Counter´Â ÇöÀç Ä«¿îÆ®¸¦ »óÅ·ΠÀ¯ÁöÇÏ¸ç »ç¿ëÀÚÀÇ Å¬¸¯¿¡ ¹ÝÀÀÇÏÁö¸¸ ¼Ó¼ºÀ» Àü´Þ¹ÞÁö ¾Ê¾Æ ¾ðÁ¦³ª °°Àº ¸ð¾çÀÌ´Ù. Ç×»ó 10ºÎÅÍ ½ÃÀÛÇϰí Áõ°¨Æøµµ 1·Î °íÁ¤µÇ¾î ÀÖ´Ù. ÄÄÆ÷³ÍÆ®¸¶´Ù ÀÌ °ªÀ» ´Ù¸£°Ô ¼³Á¤ÇÏ·Á¸é ¼Ó¼ºÀ» ¹Þ¾Æ Äڵ忡 Àû¿ëÇØ¾ß ÇÑ´Ù. ½ÃÀÛ°ªÀº init ¼Ó¼ºÀ¸·Î ¹Þ°í Áõ°¨°ªÀº step ¼Ó¼ºÀ¸·Î ¹Þ¾Æ º¸ÀÚ.

±×¸®°í ¿©·¯ °³ÀÇ ÄÄÆ÷³ÍÆ®¸¦ ³ª¿­¸¸ Çϸé Àß ±¸ºÐµÇÁö ¾ÊÀ¸¹Ç·Î ¹è°æ»öÀ» bgcolor ¼Ó¼ºÀ¸·Î ¹Þ°í ÄÄÆ÷³ÍÆ®°£À» ¶ç¿ì±â À§ÇØ ¹Ù±ù ¿©¹éÀÎ marginÀ» 10 Á¤µµ ¶ç¿î´Ù. ÀÌ Á¤µµ º¯È­¸¦ ÁÖ·Á¸é ¾îµð¸¦ ¾î¶»°Ô ¼öÁ¤ÇØ¾ß ÇÏ´ÂÁö Á÷Á¢ ½Ç½ÀÇØ º¸ÀÚ.

 

function Counter(props) {

  const [count, setCount] = useState(props.init);

 

  function decrease() {

    setCount(count - props.step)

  }

 

  function increase() {

    setCount(count + props.step)

  }

 

  return (

    <div style={{ background: props.bgcolor, margin: 10 }}>

      <h2>{count}</h2>

      <button onClick={decrease}>°¨¼Ò</button>&nbsp;

      <button onClick={increase}>Áõ°¡</button>

    </div>

  )

}

 

function App() {

  return (

    <>

      <Counter init={100} step={2} bgcolor='green' />

      <Counter init={25} step={5} bgcolor='yellow' />

  </>

  );

}

 

Counter ÇÔ¼öÀÇ Àμö·Î props¸¦ ¹Þ´Â´Ù. count »óÅÂÀÇ ÃʱⰪÀ» »ó¼ö 10 ´ë½Å props.init·Î ÁöÁ¤Çϸé È£ÃâÃøÀÌ Àü´ÞÇÑ °ªºÎÅÍ ¼¼±â ½ÃÀÛÇÑ´Ù. Áõ°¨°ªÀÎ props.stepÀº increase, decrease ÇÔ¼ö¿¡ Àû¿ëÇÏ¿© À̸¸Å­¾¿ Áõ°¨ÇÑ´Ù.

¹è°æ»öÀÎ bgcolor´Â ·çÆ® ¿¤¸®¸ÕÆ®ÀÎ div¿¡ style ¼Ó¼ºÀ¸·Î ÁöÁ¤Ç쵂 background ¸â¹ö¿¡ Àû¿ëÇÑ´Ù. <> </> ºó ¿¤¸®¸ÕÆ®´Â ¼Ó¼ºÀ» ÁöÁ¤ÇÒ ¼ö ¾øÀ¸¹Ç·Î div·Î ¹Ù²å´Ù. È£ÃâÃø¿¡¼­´Â 2°³ÀÇ Counter ÄÄÆ÷³ÍÆ®¸¦ ¹èÄ¡Ç쵂 °¢°¢ ´Ù¸¥ ¼Ó¼ºÀ» ÁÖ¾ú´Ù.

ÃÊ·Ï»ö Ä«¿îÅÍ´Â 100ºÎÅÍ ½ÃÀÛÇØ¼­ 2¾¿ Áõ°¨ÇÏ°í ³ë¶õ»ö Ä«¿îÅÍ´Â 25ºÎÅÍ ½ÃÀÛÇØ¼­ 5¾¿ Áõ°¨ÇÑ´Ù. °°Àº ÄÄÆ÷³ÍÆ®Áö¸¸ È£ÃâÃøÀÌ Àü´ÞÇÑ ¼Ó¼º¿¡ µû¶ó µ¿ÀÛ°ú ¸ð¾çÀÌ ´Þ¶óÁø´Ù. ¶Ç °¢ ÄÄÆ÷³ÍÆ®´Â ÀÚ½ÅÀÇ »óŸ¦ ½º½º·Î À¯ÁöÇÑ´Ù. ÇöÀç Ä«¿îÆ®¸¦ count »óÅ¿¡ ÀúÀåÇÏ¸ç »óŰ¡ ¹Ù²î¸é Áï½Ã ·£´õ¸µÇÏ¿© ÃֽŰªÀ» Àß º¸¿© ÁØ´Ù.

ÄÄÆ÷³ÍÆ®³¢¸®´Â ¼­·Î µ¶¸³ÀûÀÌ´Ù. ÃÊ·Ï»öÀÇ Ä«¿îÆ®¸¦ ¾î¶»°Ô ¹Ù²Ù´õ¶óµµ ³ë¶õ»ö Ä«¿îÆ®´Â ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù. ¼Ó¼º°ú »óÅ´ ÄÄÆ÷³ÍÆ®º°·Î µ¶Á¡ÀûÀÎ ¸Þ¸ð¸® ¿µ¿ª¿¡ ÀúÀåµÇ¾î °íÀ¯ÇÏ¸ç ¼­·Î ¹æÇØÇÏÁö ¾Ê´Â´Ù.

5-2.ÄÄÆ÷³ÍÆ® ½Ç½À

Fruit

ÄÄÆ÷³ÍÆ®°¡ °¡Áú ¼ö ÀÖ´Â »óÅÂÀÇ °³¼ö¿¡´Â Á¦¾àÀÌ ¾ø´Ù. ¶Ç »óÅÂÀÇ Å¸ÀÔ¿¡ ´ëÇÑ Á¦¾àµµ ¾ø´Ù. ¹è¿­ÀÌµç °´Ã¼µç ¾Æ¹«¸® º¹ÀâÇÑ °Íµµ »óÅ·ΠÀúÀåÇÒ ¼ö ÀÖ´Ù. »óŸ¦ Á¤ÀÇÇÏ´Â ¿©·¯ °¡Áö ½Ç½ÀÀ» ÇØ º¸ÀÚ.

½ÇÇàÁß¿¡ ¹Ù²ð ¼ö ÀÖ°í ÄÄÆ÷³ÍÆ®°¡ ½º½º·Î ±â¾ïÇØ¾ß ÇÒ °ªÀ» »óÅ·ΠÁ¤ÀÇÇÑ´Ù. <h2> ű׿¡ °úÀÏ À̸§À» Ãâ·ÂÇ쵂 ¾Æ·¡ÂÊ¿¡ µÎ °³ÀÇ ¹öưÀ» ¹èÄ¡ÇÏ°í °¢ ¹öưÀ» ´©¸¦ ¶§ °úÀÏ À̸§À» Apple, Orange·Î ¹Ù²ã º¸ÀÚ.

°úÀÏ À̸§À» Ç¥½ÃÇÏ´Â ÄÄÆ÷³ÍÆ®À̹ǷΠFruit·Î À̸§À» ºÙÀδÙ. ¾î¶² °úÀÏ À̸§À» ¼±ÅÃÇß´ÂÁö ±â¾ïÇÏ´Â °ÍÀÌ ¹Ù·Î »óÅÂÀÌ´Ù. »óÅÂÀÇ À̸§À» fruit·Î ÁöÁ¤Çϰí ÃʱⰪÀº ¾î¶² °Íµµ ¼±ÅÃÇÏÁö ¾Ê¾Ò´Ù´Â ÀǹÌÀÇ "Choice"·Î ÁöÁ¤ÇÑ´Ù.

 

function Fruit() {

  const [fruit, setFruit] = useState("Choice")

 

  function appliClick() {

    setFruit("Apple")

  }

 

  function orangeClick() {

    setFruit("Orange")

  }

 

  return (

    <>

      <h2>{fruit}</h2>

      <button onClick={appliClick}>Apple</button>&nbsp;

      <button onClick={orangeClick}>Orange</button>

    </>

  )

}

 

function App() {

  return (

    <>

      <Fruit />

  </>

  );

}

 

<h2>¿¡ ÇöÀç °úÀÏ »óŰªÀÎ {fruit}¸¦ Ç¥½ÃÇÑ´Ù. µÎ ¹öưÀº Ŭ¸¯ÇÒ ¶§ ¹Ù²Ü °úÀÏÀ» ĸ¼ÇÀ¸·Î Ç¥½ÃÇϰí À̺¥Æ® Çڵ鷯¿¡¼­ setFruit ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© °úÀÏ À̸§À» ¹Ù²Û´Ù. Ŭ¸¯ÇÏ´Â Áï½Ã ·£´õ¸µÀÌ ¹ß»ýÇÏ¿© <h2>ÀÇ °úÀÏ À̸§ÀÌ ¹Ù²ï´Ù.

  

»ç¿ëÀÚÀÇ µ¿ÀÛ¿¡ µû¶ó »óŸ¦ ¹Ù²Ù°í º¸¿© ÁÖ´Â °£´ÜÇÑ ¿¹Á¦ÀÌ´Ù. Çڵ鷯¸¦ È­»ìÇ¥ ÇÔ¼ö·Î ÀÛ¼ºÇÏ¸é ´õ ª°Ô ¸¸µé ¼ö ÀÖ´Ù.

 

function Fruit() {

  const [fruit, setFruit] = useState("Choice")

 

  return (

    <>

      <h2>{fruit}</h2>

      <button onClick={() => setFruit("Apple")}>Apple</button>&nbsp;

      <button onClick={() => setFruit("Orange")}>Orange</button>

    </>

  )

}

 

°£´ÜÇÑ Çڵ鷯´Â ÄÄÆ÷³ÍÆ®¾È¿¡ ÀÛ¼ºÇÏ´Â °ÍÀÌ °£ÆíÇÏ´Ù. Áö±Ý±îÁö´Â À̺¥Æ® Çڵ鷯°¡ ÇÔ¼öÀÓÀ» ºÐ¸íÈ÷ º¸À̱â À§ÇØ ºÐ¸®µÈ ÇÔ¼ö·Î ÀÛ¼ºÇߴµ¥ ¾ÕÀ¸·Î´Â °¡±ÞÀû ÀζóÀÎÀ¸·Î ª°Ô ÀÛ¼ºÇϱâ·Î ÇÑ´Ù.

AdBox

¼Ó¼º°ú »óÅ´ ¸®¾×Æ® ÄÄÆ÷³ÍÆ®ÀÇ ±âº»ÀÌ´Ù. ÀÌ µÑ¸¸ Àß ¾Ë¾Æµµ À¢¸¸ÇÑ ÄÄÆ÷³ÍÆ®´Â Á¦ÀÛÇÒ ¼ö ÀÖ´Ù. AdBox´Â °ÅÀÇ ¸ðµç »çÀÌÆ®¿¡ Á¸ÀçÇÏ´Â ±¤°í»óÀÚÀÌ´Ù.

 

±¤°í´Â Á¦Ç° Á¤º¸¿Í °¡°ÝÀ» Ç¥½ÃÇÑ´Ù. ±×¸®°í ÀÚ¶û°Å¸®¸¦ ´Ã¾î ³õ¾Æ »ç¿ëÀÚ¸¦ À¯È¤ÇÏ¿© Àå¹Ù±¸´Ï¿¡ ´ãµµ·Ï ²¿µå°Ü¾ß ÇÑ´Ù. ÀÌ ÄÄÆ÷³ÍÆ®¿¡ ÇÊ¿äÇÑ Á¤º¸¸¦ ³ª¿­ÇØ º¸ÀÚ. º°Á¡À̳ª ¹è¼Ûºñ °°Àº °Ç »©°í µü ¼¼ °¡Áö ±âº» Á¤º¸¸¸ Ç¥½ÃÇÑ´Ù. °¢ Á¤º¸ÀÇ Æ¯¼ºÀ» Àß »ìÆì º¸°í ¾î¶»°Ô ±¸ÇöÇÒÁö ¿¬±¸ÇØ º¸ÀÚ.

 

¢ºÁ¦Ç°¸í, °¡°Ý : »óǰ¸¶´Ù ´Ù¸£µÇ ½ÇÇàÁß¿¡ ¹Ù²îÁö´Â ¾Ê´Â´Ù. ÀÌ·± Á¤º¸´Â ÄÄÆ÷³ÍÆ®¸¦ »ý¼ºÇÒ ¶§ ºÎ¸ð°¡ Àü´ÞÇÏ´Â ¼Ó¼ºÀ¸·Î ¹Þ´Â´Ù.

¢ºÀå¹Ù±¸´Ï¿¡ ´ã±â : »ç¿ëÀÚ°¡ Ŭ¸¯Çؼ­ Àå¹Ù±¸´Ï¿¡ ´ã°Å³ª »©¸ç ½ÇÇàÁß¿¡ ¹Ù²ð ¼ö ÀÖ´Ù. ÀÌ·± Á¤º¸´Â »óÅ·Π±¸ÇöÇÑ´Ù.

 

µÎ °³ÀÇ ¼Ó¼º°ú ÇÑ °³ÀÇ »óÅÂÀ̸é ÃæºÐÇÏ´Ù. ÄÄÆ÷³ÍÆ® Ç¥¸é¿¡´Â Á¦Ç°°ú °¡°ÝÀ» Ç¥½ÃÇ쵂 À̹ÌÁö°¡ ½Ç°¨³ªÁö¸¸ ½Ç½ÀÀÌ ¹ø°Å·Î¿ì´Ï ¹®ÀÚ¿­·Î Ç¥½ÃÇÑ´Ù. ¶Ç Àå¹Ù±¸´Ï¿¡ ³Ö°í »©±â À§ÇÑ ¹öưÀÌ ÇÊ¿äÇÏ´Ù.

 

function AdBox(props) {

  const [cart, setCart] = React.useState(false)

 

  return (

    <div className={cart ?"incart":"outcart"}>

      <h3>{props.product} : {props.price}¿ø</h3>

      <button onClick={() => setCart(!cart)}>Àå¹Ù±¸´Ï {cart ?"»©±â":"´ã±â"}</button>

    </div>

  )

}

 

function App() {

  return (

    <>

      <AdBox product="¼ÒÁ¬ ÀÎü°øÇРŰº¸µå" price="198000"/>

      <AdBox product="ÇÏÀ̴нº 128T SSD" price="280000"/>

    </>

  );

}

 

ÄÄÆ÷³ÍÆ® À̸§Àº AdBox·Î Áö¾ú´Ù. ºÎ¸ð´Â ¼Ó¼ºÀ¸·Î Á¦Ç°¸íÀÎ product¿Í °¡°ÝÀÎ price¸¦ Àü´ÞÇϸç AdBox´Â µÎ Á¤º¸¸¦ Á¶¸³ÇÏ¿© <h3> ű׿¡ Ç¥½ÃÇÑ´Ù. ±×¸®°í ±× ¾Æ·¡¿¡ Àå¹Ù±¸¿¡ ´ã´Â ¹öưÀ» ¹èÄ¡Çϰí Ŭ¸¯½Ã cartÀÇ »óŸ¦ º¯°æÇÑ´Ù.

Àå¹Ù±¸´Ï¿¡ ´ã¾Ò´ÂÁö ¾Æ´ÑÁö´Â ½ÇÇàÁß¿¡ ¹Ù²ð ¼ö ÀÖ¾î cart »óÅ·ΠÁ¤ÀÇÇßÀ¸¸ç ±âº»°ªÀº false·Î ÁöÁ¤ÇÏ¿© ±¸ÀÔÀüÀÌ´Ù. ¹öư Ŭ¸¯½Ã setCart(!cart) ¸Þ¼­µå·Î cart »óŸ¦ ¹Ý´ë·Î µÚÁý´Â´Ù. Àå¹Ù±¸´Ï¿¡ ³ÖÀº »óǰ°ú ±×·¸Áö ¾ÊÀº »óǰÀº cart »óÅ¿¡ µû¶ó ´ÙÀ½ µÎ °¡Áö¸¦ °áÁ¤ÇÑ´Ù.

 

¢º div ű×ÀÇ Å¬·¡½º¸íÀ» incart, outcart·Î Åä±ÛÇÑ´Ù.

¢º ¹öưÀ» ĸ¼ÇÀ» »©±â ¶Ç´Â ´ã±â·Î Åä±ÛÇÑ´Ù.

 

°£´ÜÇÑ ¼±ÅÃÀ̹ǷΠ»ïÇ× Á¶°Ç ¿¬»êÀÚ¸¦ »ç¿ëÇß´Ù. Ŭ·¡½º¸íÀÌ ¹Ù²î¹Ç·Î °¢ Ŭ·¡½º¿¡ ´ëÇÑ ½ºÅ¸ÀÏÀ» ´Ù¸£°Ô Á¤ÀÇÇÑ´Ù. ½ºÅ¸ÀÏÀº ÀÚ¹Ù½ºÅ©¸³Æ®º¸´Ù´Â CSS ÆÄÀÏ¿¡ ÀÛ¼ºÇÏ´Â °ÍÀÌ ÁÁ´Ù. App.css¿¡ µÎ °³ÀÇ ½ºÅ¸ÀÏÀ» Ãß°¡ÇÑ´Ù.

 

.App {

  text-align: center;

}

 

....

 

.incart {

  width:300px;

  padding:10px;

  margin:5px;

  border:1px solid red;

  background:greenyellow;

}

.outcart {

  width:300px;

  padding:10px;

  margin:5px;

  border:1px solid black;

  background:lightgray;

}

 

Æø 300¿¡ ¾ÈÂÊ ¿©¹é 10, ¹Ù±ù ¿©¹é 5¸¦ ÁÖ¾î »ç°¢ÇüÀ¸·Î °¨½Ñ °ÍÀº °°´Ù. Àå¹Ù±¸´Ï¿¡ ´ã±ä »óǰÀº »¡°£»ö Å׵θ®¿¡ ÃÊ·Ï»ö ¹è°æÀÌ°í ¾ÆÁ÷ ´ãÁö ¾ÊÀº »óǰÀº °ËÁ¤»ö Å׵θ®¿¡ ȸ»ö ¹è°æÀÌ´Ù. cart »óŰ¡ ¹Ù²î¸é divÀÇ Å¬·¡½º¸íÀÌ ¹Ù²î¸é¼­ Àû¿ëÇÒ ½ºÅ¸Àϵµ ´Þ¶óÁø´Ù. ½ÇÇàÇØ º¸ÀÚ.

ºÎ¸ð°¡ Àü´ÞÇÑ Á¦Ç°¸í°ú °¡°ÝÀ» Àß Ç¥½ÃÇÏ¸ç ¼Ó¼º¿¡ µû¶ó ±¤°íÀÇ ³»¿ëÀÌ ´Þ¶óÁø´Ù. ¹öưÀ» Ŭ¸¯Çϸé Àå¹Ù±¸´Ï¿¡ ´ã±â¸ç ¹öưÀÇ Ä¸¼Ç°ú ¹è°æ»öÀÌ ¹Ù²ï´Ù. ÀÚ½ÅÀÇ ¼Ó¼ºÀ» Àß Ç¥ÇöÇÏ°í »ç¿ëÀÚÀÇ Å¬¸¯¿¡ ´ëÇØ ½º½º·Î µ¿ÀÛÇÏ°í ¸ð¾çÀ» ¹Ù²Ù±âµµ ÇÑ´Ù.

µÎ °³ÀÇ ÄÄÆ÷³ÍÆ®°¡ ¼­·Î °£¼·¾øÀÌ µ¶¸³ÀûÀ¸·Î Àß µ¿ÀÛÇÏ´Â ºÎǰÀÇ ¿ªÇÒÀ» Ãæ½ÇÈ÷ ¼öÇàÇϰí ÀÖ´Ù. ÇÔÃàÀûÀÎ Äڵ带 »ç¿ëÇϱ⠶§¹®¿¡ ±â´É¿¡ ºñÇØ ¼Ò½º Äڵ尡 ±²ÀåÈ÷ ª´Ù. ÀÌ·± ÄÄÆ÷³ÍÆ®¸¦ Á¶ÇÕÇØ¼­ À¥ ÆäÀÌÁö¸¦ ¸¸µå´Â °ÍÀÌ´Ù.

Label

·¹À̺íÀº È­¸é¿¡ ¹®ÀÚ¿­ ¸Þ½ÃÁö¸¦ º¸¿©ÁÖ´Â °£´ÜÇÑ ÄÄÆ÷³ÍÆ®ÀÌ´Ù. ¸Þ½ÃÁö ³»¿ëÀº ºÎ¸ð°¡ Àü´ÞÇØ Áִ´ë·Î Ç¥½ÃÇÏµÇ Å¬¸¯½Ã Ȱ¼º/ºñȰ¼º »óŸ¦ ½º½º·Î Åä±ÛÇÑ´Ù. ¾î¶²°Ô ¼Ó¼ºÀÌ°í ¾î¶²°Ô »óÅÂÀÎÁö ¾î·ÆÁö ¾Ê°Ô °áÁ¤ÇÒ ¼ö ÀÖ´Ù.

 

function Label(props) {

  const [isActive, setIsActive] = useState(props.isActive)

 

  return (

      <h3

        style = {{color : isActive ? 'black':'gray'}}

        onClick={() => { setIsActive(!isActive); }}

      >

        {props.message}

      </h3>

  )

}

 

function App() {

  return (

    <>

      <Label message="ÀÚµ¿ ·Î±×ÀÎ" isActive={true}/>

    </>

  );

}

 

message´Â ºÎ¸ð°¡ Àü´ÞÇØ ÁÖ°í ¹Ù²îÁö ¾ÊÀ¸´Ï ¼Ó¼ºÀ̰í isActive´Â ºÎ¸ð·ÎºÎÅÍ ÃʱⰪÀ» ¹ÞÁö¸¸ ½ÇÇàÁß¿¡ ¹Ù²ð ¼ö ÀÖÀ¸´Ï »óÅÂÀÌ´Ù. ºÎ¸ð´Â ÀÚµ¿ ·Î±×ÀÎ »óŸ¦ Ç¥½ÃÇϱâ À§ÇØ ·¹À̺íÀ» ¹èÄ¡ÇÏ°í ·¹À̺íÀº ½º½º·Î Åä±Û °¡´ÉÇÏ´Ù.

 

Ȱ¼º ¿©ºÎ´Â °ËÁ¤»ö°ú ȸ»öÀ¸·Î ±¸ºÐÇÑ´Ù. ·¹À̺íÀº ¿É¼Ç°ªÀ» º¸¿©ÁÖ°í Åä±ÛÇÏ´Â ±â´ÉÀ» Á¦°øÇÏ´Â ÄÁÆ®·ÑÀÌ´Ù. ¾î¶²°Ô »óÅÂÀÎÁö, ¾î¶²°Ô ¼Ó¼ºÀÎÁö Àß ±¸ºÐÇØ¾ß ÇÑ´Ù.

À̹ø¿¡´Â ÀÌ ·¹À̺íÀ» µÎ °³ ¹èÄ¡ÇÏ¿© ¼­·Î ¹Ý´ëµÇ´Â ¿É¼Ç Áß Çϳª¸¦ ¹èŸÀûÀ¸·Î ¼±ÅÃÇÑ´Ù°í ÇØ º¸ÀÚ. µÎ ÄÄÆ÷³ÍÆ®¸¦ ¹­¾î ÇϳªÀÇ ±×·ìó·³ »ç¿ëÇÏ´Â ¿¹ÀÌ´Ù.

 

function Label(props) {

  const [isActive, setIsActive] = useState(props.isActive)

 

  return (

      <h3

        style = {{color : isActive ? 'black':'gray'}}

        onClick={() => { setIsActive(!isActive); }}

      >

        {props.message}

      </h3>

  )

}

 

function App() {

  return (

    <div style={{ display: 'flex', gap: '32px' }}>

      <Label message="<- ¿ÞÂÊ" isActive={true}/>

      <Label message="¿À¸¥ÂÊ ->" isActive={false}/>

    </div>

  );

}

 

µÎ ÄÄÆ÷³ÍÆ®¸¦ ³ª¶õÈ÷ ¹èÄ¡Çϱâ À§ÇØ divÀÇ display ½ºÅ¸ÀÏÀ» flex·Î ÁöÁ¤ÇÏ°í ¾à°£ °£°ÝÀ» ¶ç¿ü´Ù. ·¹À̺í·Î ¿ÞÂÊ ¶Ç´Â ¿À¸¥ÂÊ Áß Çϳª¸¦ ¼±ÅÃÇÏ¿© ÇöÀç ¹æÇâÀ» Ç¥½ÃÇÑ´Ù. ºÎ¸ð´Â ¿ÞÂÊÀº Ȱ¼ºÈ­, ¿À¸¥ÂÊÀº ºñȰ¼ºÈ­ »óÅ·ΠÃʱⰪÀ» ÁöÁ¤ÇÑ´Ù.

Ãʱ⠸ð½ÀÀº Àß µ¿ÀÛÇÏ´Â °Å °°Áö¸¸ µÎ ·¹À̺íÀÌ µ¶¸³ÀûÀ¸·Î Åä±Û °¡´ÉÇÏ´Ï µÑ ´Ù Ȱ¼ºÈ­µÇ°Å³ª µÑ ´Ù ºñȰ¼ºÈ­µÉ ¼öµµ ÀÖ´Ù. ÇÑÂÊÀ» ¹Ù²Û´Ù°í ÇØ¼­ ¹Ý´ëÂÊÀÌ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù.

 

µÎ ÄÄÆ÷³ÍÆ®°¡ ¹èŸÀû ¿É¼ÇÀ» ÁöÁ¤ÇÏ´Â ±×·ìÀÌ µÇ·Á¸é µÑ Áß Çϳª¸¸ Ȱ¼ºÈ­µÇ¾î¾ß ÇÑ´Ù.  ÀÌ·± µ¿ÀÛÀ» ±¸ÇöÇÏ·Á¸é ÀÚ½ÅÀÌ È°¼ºÈ­µÉ ¶§ ¹Ý´ëÂÊ ·¹À̺íÀº ºñȰ¼ºÈ­½ÃÄÑ¾ß ÇÑ´Ù. ±×·¯³ª ÄÄÆ÷³ÍÆ®³¢¸®´Â ¼­·Î µ¶¸³ÀûÀ̾ ÀÌ°Ç ºÒ°¡´ÉÇÏ´Ù. ÇüÁ¦³¢¸® °­Á¦·Î »óŸ¦ ¹Ù²Ü ¹æ¹ýÀÌ ¾ø°í ½ÉÁö¾î ¼­·ÎÀÇ Á¸ÀçÁ¶Â÷µµ ¸ð¸¥´Ù.

»óÅ ²ø¾î ¿Ã¸®±â

°á±¹ Çϳª¸¸ Ȱ¼ºÈ­ÇÏ·Á¸é ±× »óÅ´ ÄÄÆ÷³ÍÆ®°¡ ¾Æ´Ñ ºÎ¸ð°¡ °ü¸®ÇØ¾ß ÇÑ´Ù. °³º°ÀûÀΠȰ¼º/ºñȰ¼ºÀÌ ¾Æ´Ñ ´©°¡ Ȱ¼ºÈ­µÇ¾î ÀÖ´ÂÁö ºÎ¸ð°¡ ¾Ë¾Æ¾ß ÇÑ´Ù. Ȱ¼º »óŸ¦ °øÅë ºÎ¸ð¿¡°Ô·Î ¿Å±â´Âµ¥ À̸¦ »óÅ ²ø¾î ¿Ã¸®±â(State lifting)¶ó°í ÇÑ´Ù.

 

function Label(props) {

  const [isActive, setIsActive] = useState(props.isActive)

 

  return (

      <h3

        style = {{color : isActive ? 'black':'gray'}}

        onClick={() => {  }}

      >

        {props.message}

      </h3>

  )

}

 

function App() {

  const [activeLabel, setActiveLabel] = useState(1)

  return (

    <div style={{ display: 'flex', gap: '32px' }}>

      <Label message="<- ¿ÞÂÊ" isActive={activeLabel === 1}/>

      <Label message="¿À¸¥ÂÊ ->" isActive={activeLabel === 2}/>

    </div>

  );

}

 

´©°¡ Ȱ¼ºÈ­µÇ¾î ÀÖ´ÂÁö´Â ÀÌÁ¦ ºÎ¸ðÀÇ »óÅÂÀ̸ç activeLabel »óŸ¦ Ãß°¡Çß´Ù. ÀÌ °ªÀÌ 1ÀÌ¸é ¿ÞÂÊ, 2¸é ¿À¸¥ÂÊÀÌµÇ ÃʱⰪÀº ¿ÞÂÊÀÎ 1ÀÌ´Ù. ºÎ¸ð´Â activeLabel¿¡ µû¶ó µÎ ·¹À̺íÀÇ È°¼º ¿©ºÎ¸¦ ¼Ó¼ºÀ¸·Î Àü´ÞÇÑ´Ù.

ÃʱâÈ­´Â ÀßµÇÁö¸¸ ¾ÆÁ÷ »óŸ¦ ¹Ù²Ù´Â ¹æ¹ýÀº ¾ø´Ù. Â÷Àϵ带 Ŭ¸¯ÇßÀ» ¶§ÀÇ À̺¥Æ® 󸮰¡ ºñ¾î Àִµ¥ ¿©±â¿¡ ¹» ³Ö¾î¾ß ÇÒ±î? ÀÇ»çÄÚµå·Î Àû¾î º¸¸é ÇÊ¿äÇÑ µ¿ÀÛÀº ¸íÈ®ÇÏ´Ù.

 

<h3 onClick={() => { ³ª´Â Ȱ¼ºÈ­ Åä±Û, ÇüÁ¦´Â ¹Ý´ë·Î Åä±Û }}>

 

±×·¯³ª ³» »óÅ´ ¹Ù²Ü ¼ö ÀÖÁö¸¸ ÇüÁ¦ÀÇ »óŸ¦ ¹Ù²Ü ¼ö´Â ¾ø´Ù. ÀÌ Ã³¸®´Â ºÎ¸ð°¡ ÇØ Áà¾ß Çϴµ¥ ºÎ¸ð´Â ÀÚ½ÄÀÌ Å¬¸¯µÇ¾ú´Ù´Â À̺¥Æ®¸¦ ¹ÞÁö ¾Ê´Â´Ù. ¸®¾×Æ®ÀÇ µ¥ÀÌÅÍ´Â Ç×»ó ºÎ¸ð¿¡°Ô¼­ ÀÚ½ÄÂÊÀ¸·Î¸¸ À̵¿ÇÏ¸ç ¹Ý´ë·Î´Â À̵¿ÇÏÁö ¾Ê´Â´Ù. ÀÚ½ÄÀÌ Å¬¸¯ »ç½ÇÀ» ºÎ¸ð¿¡°Ô ¾Ë¸± ¹æ¹ýÀÌ ¾ø´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é ºÎ¸ð°¡ »óŸ¦ ¹Ù²Ù´Â ¹æ¹ýÀ» ÀڽĿ¡°Ô °¡¸£ÃÄ Áà¾ß ÇÑ´Ù. ¼Ó¼ºÀ¸·Î Àü´ÞÇÒ ¼ö Àִ ŸÀÔ¿¡´Â Á¦¾àÀÌ ¾ø¾î ÇÔ¼öµµ Àü´ÞÇÒ ¼ö ÀÖ´Ù. ºÎ¸ð°¡ ¾Æ¿¹ ÀÌ µ¿ÀÛÀ» ÇÔ¼ö·Î ¸¸µé¾î ¼Ó¼ºÀ¸·Î Àü´ÞÇϰí ÀÚ½ÄÀº Ŭ¸¯¿¡ ´ëÇØ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù.

 

function Label(props) {

  return (

      <h3

        style = {{color : props.isActive ? 'black':'gray'}}

        onClick={props.onToggle}

      >

        {props.message}

      </h3>

  )

}

 

function App() {

  const [activeLabel, setActiveLabel] = useState(1)

  return (

    <div style={{ display: 'flex', gap: '32px' }}>

      <Label message="<- ¿ÞÂÊ" isActive={activeLabel === 1} onToggle = {() => {setActiveLabel(1)}} />

      <Label message="¿À¸¥ÂÊ ->" isActive={activeLabel === 2} onToggle = {() => {setActiveLabel(2)}} />

    </div>

  );

}

 

Ȱ¼º ·¹À̺íÀ» 1¹øÀ¸·Î ¹Ù²Ù´Â ÇÔ¼ö¸¦ ¿ÞÂÊ ·¹À̺íÀÇ onToggle ¼Ó¼ºÀ¸·Î Àü´ÞÇÑ´Ù. ¸¶Âù°¡Áö·Î 2¹øÀ» Ȱ¼ºÈ­ÇÏ´Â ÇÔ¼ö¸¦ ¿À¸¥ÂÊ ·¹ÀÌºí¿¡°Ô Àü´ÞÇÑ´Ù. ·¹À̺íÀº Ŭ¸¯ À̺¥Æ®¿¡ ºÎ¸ð°¡ Àü´ÞÇÑ ÇÔ¼ö¸¦ ÁöÁ¤ÇÑ´Ù. È£ÃâÇÏ´Â°Ô ¾Æ´Ï¶ó ÁöÁ¤¸¸ ÇØ µÎ¸é Ŭ¸¯ À̺¥Æ® ¹ß»ý½Ã ÀÌ ÇÔ¼ö°¡ È£ÃâµÈ´Ù.

·¹À̺íÀº isActive »óŸ¦ ´õ ÀÌ»ó °¡Áú ÇÊ¿ä ¾ø´Ù. ºÎ¸ð°¡ Àü´ÞÇØÁØ ¼Ó¼º¿¡ µû¶ó Ãâ·ÂÇÏ¸é µÇ°í Ŭ¸¯¿¡ ´ëÇØ ºÎ¸ð°¡ ÁØ ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù. ºÎ¸ð´Â ÀÚ½ÅÀÌ °ü¸®ÇÏ´Â activeLabel »óÅ¿¡ µû¶ó ÀڽĿ¡°Ô ÇöÀç Ȱ¼ºÈ­ ¿©ºÎ¿Í Ŭ¸¯½ÃÀÇ µ¿ÀÛ±îÁö ¼Ó¼ºÀ¸·Î Àü´ÞÇÏ¿© '³»°¡ ½Ã۴´ë·Î¸¸ ÇØ'¶ó°í ÇØ µÎ¸é µÈ´Ù.

ÄÄÆ÷³ÍÆ®³¢¸® ºÎ¸ð, ÀÚ½Ä °ü°è¸¦ ÀÌ·ê ¶§ ·£´õÆ®¸®¸¦ ±¸¼ºÇÑ´Ù. Ç×»ó ºÎ¸ð¸¦ ¸ÕÀú ±×¸®°í ÀÚ½ÄÀ» ±×¸®µµ·Ï µÇ¾î ÀÖ¾î ºÎ¸ðÀÇ »óŰ¡ ¹Ù²î¸é ÀڽĵéÀº ¸ðµÎ ´Ù½Ã ·£´õ¸µµÈ´Ù. ÀÌ °úÁ¤¿¡¼­ ÀÚ½ÄÀº ºÎ¸ð·ÎºÎÅÍ Àü´Þ¹ÞÀº Ȱ¼º »óŸ¦ ±×¸°´Ù. µ¿ÀÛÁ¶Â÷ ¼Ó¼ºÀ¸·Î Àü´ÞÇÒ ¼ö ÀÖÀ½Àº ¸®¾×Æ®¸¦ ÀÌÇØÇϴµ¥ ÇÙ½ÉÀûÀÎ ³»¿ëÀÌ´Ï Àß ÀÍÇô µÎÀÚ. ´ÙÀ½ »çÇ×µµ ¾Ë¾Æ µÎÀÚ.

 

¢º ÁøÂ¥ À̺¥Æ®´Â DOM ¿ä¼Ò¿¡¸¸ °É ¼ö ÀÖÀ¸¸ç ¸®¾×Æ® ÄÄÆ÷³ÍÆ®´Â À̺¥Æ®¸¦ Á÷Á¢ ¹ÞÀ» ¼ö ¾ø´Ù. onClick, onMousedown µîÀº <p>, <div>, <h3> °°Àº HTML ű׿¡¼­¸¸ ¹Þ´Â´Ù. ¿Ö³ÄÇÏ¸é »ç¿ëÀÚÀÇ µ¿ÀÛÀ» ¹Þ¾Æ À̺¥Æ®¸¦ ¹ß»ý½ÃŰ´Â °ÍÀº °á±¹ ºê¶ó¿ìÀúÀÌ°í ºê¶ó¿ìÀú´Â ¸®¾×Æ® ÄÄÆ÷³ÍÆ® µûÀ§´Â ¸ð¸£±â ¶§¹®ÀÌ´Ù.

¢º ¸®¾×Æ® ÄÄÆ÷³ÍÆ®¿¡µµ À̺¥Æ® ºñ½ÁÇÑ °ÍÀ» ¸¸µé ¼ö ÀÖÁö¸¸ À̰ÍÀº ±×³É ÇÔ¼öÀÏ »Ó ¾ö¹ÐÇϰԴ À̺¥Æ®°¡ ¾Æ´Ï´Ù. À§ ¿¹Á¦ÀÇ onToggleÀº Ȱ¼º Â÷Àϵ带 ¹Ù²Ù´Â µ¿ÀÛÀ» ÇÔ¼ö·Î Á¤ÀÇÇÑ °ÍÀ̸ç ÇÔ¼öÀ̹ǷΠÀ̸§Àº ¸¶À½´ë·Î ºÙÀÏ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö¸¦ ¼Ó¼ºÀ¸·Î Àü´ÞÇϸé DOM ¿ä¼Ò°¡ ÇÊ¿äÇÒ ¶§ È£ÃâÇÑ´Ù. À§ ¿¹Á¦ÀÇ °æ¿ì »ç¿ëÀÚ°¡ <h3>¸¦ Ŭ¸¯ÇÒ ¶§ È£ÃâÇÏ¿© Ȱ¼º Â÷Àϵ带 Åä±ÛÇÑ´Ù.

 

»óÅ ²ø¾î ¿Ã¸®±âÀÇ °³³äÀÌ ¾î·ÆÁö´Â ¾ÊÁö¸¸ ¿Ö ÇÊ¿äÇÑÁö, ¿Ã¸®Áö ¾Ê¾ÒÀ» ¶§ ¾î¶² ¹®Á¦°¡ ÀÖ´ÂÁö¸¦ ÀÌÇØÇÏ´Â °úÁ¤ÀÌ Áö·çÇÏ´Ù. ÀÏ·ÃÀÇ ½Ç½ÀÀ» ÅëÇØ ¼Ó¼º°ú »óÅÂÀÇ ¿ªÇÒ, ºÎ¸ð¿¡¼­ ÀÚ½ÄÀ¸·ÎÀÇ ´Ü¹æÇâ Àü´Þ, ÇÔ¼öµµ ¼Ó¼ºÀ¸·Î Àü´ÞÇÒ ¼ö ÀÖ´Ù´Â »ç½ÇÀ» Àß ¾Ë¾Æ µÎÀÚ.

5-3.¸®µà¼­

useReducer

useState´Â µü ÇϳªÀÇ »óŸ¦ °ü¸®Çϰí ÇÊ¿äÇÒ ¶§ »óÅ º¯°æ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ½ÄÀ̶ó ´Ü¼øÇÏ°í ¾²±â ½±´Ù. »óÅ´ç Çϳª¾¿ useState¸¦ ¼±¾ðÇ쵂 »óŰ¡ Á¤ ¸¹À¸¸é °´Ã¼·Î ¹­À¸¸é µÇ´Ï °³¼ö´Â º° ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. ±×·¯³ª »óŸ¦ º¯°æÇÏ´Â ÇÔ¼ö¸¦ ¿©±â Àú±â¼­ È£ÃâÇÏ¸é ¾îµð¼­ ¹®Á¦°¡ »ý°å´ÂÁö ÆÄ¾ÇÇÏ±â ¾î·Æ´Ù.

useReducer´Â useStateÀÇ È®ÀåÆÇÀÌ´Ù. »óŸ¸ °ü¸®ÇÏ´Â°Ô ¾Æ´Ï¶ó »óŸ¦ Á¶ÀÛÇÏ´Â ¹æ¹ý±îÁöµµ °ü¸® ´ë»óÀÌ´Ù. »óŸ¦ ¹Ù²Ù´Â ÀýÂ÷´Â ´ëü·Î ºñ½ÁÇѵ¥ ¹Ù²Ü ¶§¸¶´Ù À¯»çÇÑ Äڵ带 ¹Ýº¹ÇÏ¸é ³¶ºñ°¡ ½ÉÇØÁø´Ù. »óÅ º¯°æ 󸮸¦ ÇѰ÷¿¡ ¸ð¾Æ µÎ¸é °ü¸®Çϱ⠽±´Ù.

¸®µà½º(Reduce)´Â ÁÙÀδÙ, ¸ðÀº´Ù´Â ¶æÀε¥ ¿©·¯ °÷¿¡ Èð¾îÁ® ÀÖ´Â »óÅ º¯°æ Äڵ带 ÀÌ ÇÔ¼ö ¾È¿¡ ¸ð¾Æ µÎ¸é °ü¸®Çϱ⠽±´Ù. ¸®µà¼­´Â Á÷Á¢ È£ÃâÇÏÁö ¾Ê°í ¾×¼Ç °´Ã¼¸¦ »ý¼ºÇÏ¿© µð½ºÆÐÄ¡·Î Àü´ÞÇÏ´Â °£Á¢ÀûÀÎ ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. µð½ºÆÐÄ¡´Â ¾î¶² »óŸ¦ ¾î¶»°Ô ¹Ù²Ù¶ó´Â Áö½Ã »çÇ×À» ¾×¼Ç¿¡ ´ã¾Æ ¸®µà½º·Î Àü´ÞÇÑ´Ù.

¼³¸í¸¸ µé¾î¼­´Â ¿Ö ÀÌ·± ±¸Á¶¸¦ »ç¿ëÇÏ´ÂÁö Á÷°üÀûÀ¸·Î ÀÌÇØµÇÁö ¾ÊÀ¸¹Ç·Î ¿ä¾àÀûÀÎ ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ. useReducer´Â ¸®µà¼­ ÇÔ¼ö¸¦ Àμö·Î ¹Þ°í µð½ºÆÐÄ¡¸¦ ¸®ÅÏÇÑ´Ù. È£Ãâ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

 

[state, dispatch] = useReducer(reducer, init)

 

ù¹øÂ° ÀμöÀÎ reducer°¡ »óÅ º¯°æ ÇÔ¼öÀ̸ç À̸§Àº º¸Åë reducer¶ó°í ºÙÀδÙ. »óÅÂÀÇ ±×·ìº°·Î ¿©·¯ °³ÀÇ ¸®µà¼­¸¦ ¾µ ¶§¸¦ ´ëºñÇÏ¿© ±×·ì¸íÀ» Á¢µÎ·Î ºÙÀ̱⵵ ÇÑ´Ù. ÇÏ´Â ÀÏÀÌ Á¤ÇØÁ® ÀÖ¾î ±¸Á¶´Â Ç×»ó °°´Ù. Àμö·Î ÇöÀç »óŰª°ú ÀÌ »óŰªÀ» ¾î¶»°Ô ¹Ù²Ù¶ó´Â Áö½Ã»çÇ×ÀÎ actionÀ» ¹Þ°í º¯°æÇÑ °ªÀ» ¸®ÅÏÇÑ´Ù.

 

function reducer(»óÅÂ, ¾×¼Ç) {

  ¾×¼Ç¿¡ µû¸¥ »óÅ º¯°æ

}

 

»óŸ¦ Á¶ÀÛÇÏ´Â ¹æ¹ýÀÌ ´Ù¾çÇÏ°í °¢ ¹æ¹ýº°·Î Àμö°¡ ÀÖ´Â °æ¿ìµµ ÀÖ¾î È£ÃâÇϱâ Àü¿¡ »ó¼¼ÇÑ Áö½Ã»çÇ×À» action °´Ã¼·Î »ý¼ºÇÑ´Ù. ±×¸®°í dispatch¸¦ ÅëÇØ actionÀ» ¸®µà¼­·Î º¸³½´Ù. Ä«¿îÅÍ ¿¹Á¦¸¦ useReducer ÈÅÀ¸·Î »õ·Î ¸¸µé¾î º¸ÀÚ. ¾×¼ÇÀÌ ´Ù¾çÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» º¸À̱â À§ÇØ Áõ°¡, °¨¼Ò »Ó¸¸ ¾Æ´Ï¶ó ¸®¼Â ±â´ÉÀ» Ãß°¡ÇÑ´Ù.

 

function Counter() {

  const [count, countDispatch] = useReducer(countReducer, 10)

 

  function countReducer(count, action) {

    console.log("ÇöÀç Ä«¿îÆ® : " + count);

   

    switch (action.type) {

      case "inc":

        return count + 1

      case "dec":

        return count - 1

      case "reset":

        return 10

      default:

        return count

    }

  }

 

  return (

    <>

      <h2>{count}</h2>

      <button onClick={() => countDispatch({type:"dec"})}>°¨¼Ò</button>&nbsp;

      <button onClick={() => countDispatch({type:"inc"})}>Áõ°¡</button>&nbsp;

      <button onClick={() => countDispatch({type:"reset"})}>¸®¼Â</button>

    </>

  )

}

function App() {

  return (

    <>

      <Counter />

    </>

  );

}

 

countReducer ÇÔ¼ö°¡ ¸®µà¼­ÀÌ¸ç ¼ýÀÚ¸¦ ¼¼´Â »óÅ º¯°æÀ» ´ã´çÇÑ´Ù´Â Àǹ̷ΠÁ¢µÎ¸¦ ºÙ¿´´Ù. countÀÇ ÇöÀç°ª°ú ÀÌ »óŸ¦ ¾î¶»°Ô ¹Ù²Ù¶ó´Â Áö½Ã»çÇ×ÀÎ action °´Ã¼¸¦ Àμö·Î ¹Þ°í actionÀÇ type°ª¿¡ µû¶ó count¸¦ Áõ°¨Çϰųª ¸®¼ÂÇÑ ÈÄ º¯°æµÈ »óŰªÀ» ¸®ÅÏÇÑ´Ù.

¸®µà¼­¸¦ ÁغñÇÑ ÈÄ useReducer ÈÅÀ¸·Î »óŸ¦ Á¤ÀÇÇÑ´Ù. Àμö·Î ¸®µà¼­¿Í ÃʱⰪ 10À» ÁÖ¸é »óÅ º¯¼ö¿Í countDispatch¸¦ ¸®ÅÏÇÑ´Ù. ¿©±â±îÁö ÁغñÇØ µÎ¸é ÇÊ¿äÇÒ ¶§ µð½ºÆÐÄ¡¸¦ ÅëÇØ »óŸ¦ ¸¶À½´ë·Î º¯°æÇÒ ¼ö ÀÖ´Ù. µð½ºÆÐÄ¡·Î ¸®µà¼­¸¦ È£ÃâÇÒ ¶§ actionÀÇ type¿¡ ¾î¶² µ¿ÀÛÀ» ÇÒÁö ÁöÁ¤ÇÑ´Ù. ¼¼ ¹öư¿¡ ´ëÇØ typeÀÌ °¢°¢ ´Ù¸¥ ¾×¼Ç °´Ã¼¸¦ Àü´ÞÇß´Ù.

¹öưÀ» ´©¸£¸é inc, dec, reset ¾×¼ÇÀÌ ¸®µà¼­·Î Àü´ÞµÇ¸ç ¸®µà¼­´Â ¾×¼ÇÀÇ type¿¡ µû¶ó »óŸ¦ ÀûÀýÈ÷ º¯°æÇÑ´Ù. ¸®µà¼­¸¦ Á÷Á¢ È£ÃâÇÏÁö ¾Ê°í µð½ºÆÐÄ¡¸¦ ÅëÇØ °£Á¢ÀûÀ¸·Î È£ÃâÇØ¾ß »óÅ º¯°æ°ú ·£´õ¸µ±îÁö ¹­À½À¸·Î ó¸®ÇÒ ¼ö ÀÖ´Ù. useState¿¡¼­ count¿¡ °ªÀ» Á÷Á¢ ´ëÀÔÇÏÁö ¾Ê°í setCount¸¦ ÅëÇÏ´Â °Í°ú °°Àº ÀÌÀ¯ÀÌ´Ù.

»óŰªÀ» ¹Ù²Ù±â Àü¿¡ countÀÇ ÇöÀç°ªÀ» ·Î±×·Î Ãâ·ÂÇÏ´Â Äڵ尡 Àִµ¥ ÀÌ´Â ¸ðµç »óÅ º¯°æ¿¡ ´ëÇÑ °øÅëÀÛ¾÷¿¡ ÇØ´çÇÑ´Ù. °ªÀÇ À¯È¿¼ºÀ» Á¡°ËÇϰųª º¯°æ ÀÌ·ÂÀ» °ü¸®Çϰųª ¿¬°ü »óÅÂ¿Í µ¿±âÈ­ÇÏ´Â µî »óÅ º¯°æ°ú °ü·ÃµÈ ¸ðµç ÀÛ¾÷À» ¿©±â¼­ ¼öÇàÇÒ ¼ö ÀÖ´Ù. »óŸ¦ ¾î¶»°Ô ¹Ù²Ùµç °øÅë ÀÛ¾÷À» switch¹® ÀÌÀü¿¡ µü Çѹø¸¸ ÇÏ¸é µÇ´Ï ÄÚµåÀÇ Áߺ¹ÀÌ Á¦°ÅµÈ´Ù.

switch¹®ÀÇ ÀÌÀü »óŸ¦ ±×´ë·Î ¸®ÅÏÇÏ´Â default 󸮴 ²À ÇÊ¿äÇÏ¸ç »ý·«Çؼ­´Â ¾ÈµÈ´Ù. Ȥ½Ã¶óµµ Á¤ÀÇÇÏÁö ¾ÊÀº ¾×¼ÇÀ» À߸ø Àü´ÞÇÏ´õ¶óµµ ÃÖ¼ÒÇÑ ÀÌÀü »óÅ´ À¯ÁöÇØ¾ß ÇÑ´Ù. ÀÌ Ã³¸®°¡ ¾øÀ¸¸é undefined¸¦ ¸®ÅÏÇÏ¿© °ñÄ¡ ¾ÆÇ ¹ö±×°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.

¾×¼Ç °´Ã¼

¿©±â±îÁö¸¸ º¸¸é useState¿Í Çü½Ä¸¸ ´Ù¸¦ »Ó º°¹Ý Â÷À̰¡ ¾ø¾î º¸ÀÌÁö¸¸ »óÅ º¯°æ ¹æ½ÄÀÎ typeÀÇ Á¾·ù¸¦ ´Ã¸®´Â ½ÄÀ¸·Î µÎ¹è³ª Àý¹ÝÀ¸·Î ¹Ù²Ù´Â µ¿ÀÛÀ» Ãß°¡Çϱ⠽±´Ù. ¶Ç action °´Ã¼¿¡ ¾ó¸¶µçÁö ¸¹Àº Á¤º¸¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ¾î °¢ µ¿ÀÛÀÇ Ãß°¡ Àμö¸¦ »ó¼¼È÷ Æ÷ÇÔ½ÃŰ´Â°Ô °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î Áõ°¡, °¨¼Òµµ ²À 1¾¿¸¸ ÇÏ´Â°Ô ¾Æ´Ï¶ó È£ÃâÃøÀÌ Áõ°¨·®À» ÁöÁ¤ÇÒ ¼ö ÀÖ°í ¸®¼Âµµ º°µµÀÇ ÃʱⰪÀ» ÁÙ ¼ö ÀÖ´Ù.

 

function Counter() {

  const [count, countDispatch] = useReducer(countReducer, 10)

 

  function countReducer(count, action) {

    console.log("ÇöÀç Ä«¿îÆ® : " + count);

 

    switch (action.type) {

      case "inc":

        return count + action.delta

      case "dec":

        return count - action.delta

      case "twice":

        return count * 2

      case "half":

        return count / 2

      case "reset":

        return 10

      default:

        return count

    }

  }

 

  return (

    <>

      <h2>{count}</h2>

      <button onClick={() => countDispatch({type:"dec", delta:3})}>°¨¼Ò</button>&nbsp;

      <button onClick={() => countDispatch({type:"inc", delta:2})}>Áõ°¡</button>&nbsp;

      <button onClick={() => countDispatch({type:"twice"})}>µÎ¹è</button>&nbsp;

      <button onClick={() => countDispatch({type:"half"})}>Àý¹Ý</button>&nbsp;

      <button onClick={() => countDispatch({type:"reset"})}>¸®¼Â</button>

    </>

  )

}

 

function App() {

  return (

    <>

      <Counter />

    </>

  );

}

 

µ¿ÀÛ Çϳª´ç switch¹®ÀÇ case¸¸ ´Ã¸®¸é µÈ´Ù. ¶Ç action¿¡ delta ¸â¹ö¸¦ Ãß°¡ÇÏ¿© Áõ°¨ÀÇ Á¤µµ¸¦ ÁöÁ¤Çߴµ¥ ´õÇÒ ¶§´Â 2¸¸Å­, »¬ ¶§´Â 3¸¸Å­ÀÌ´Ù. ¹öư °³¼ö¸¦ ´Ã¸®°í º¸³¾ ¾×¼Ç¸¸ Àǹ̿¡ ¸Â°Ô ´Ù½Ã ¸¸µé¸é µÈ´Ù. ¿øÇÑ´Ù¸é 5Áõ°¡, 4°¨¼Ò µîÀÇ ´õ »ó¼¼ÇÑ Áõ°¨ µ¿ÀÛµµ ¾ó¸¶µçÁö ¸¸µé ¼ö ÀÖ´Ù.

useState´Â setCount·Î °ªÀ» ¹Ù·Î ÁöÁ¤ÇÒ ¼ö¸¸ ÀÖÁö¸¸ useReducer´Â action°ú dispatch¸¦ °æÀ¯ÇØ¾ß ÇÏ´Â ¹ø°Å·Î¿òÀÌ ÀÖÁö¸¸ Áß°£¿¡ ÇѴܰ谡 ´õ µé¾î°¡¸é »óŸ¦ ÇÑ °÷¿¡¼­ ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î °ü¸®ÇÒ ¼ö ÀÖ´Ù. ±×·¡µµ Â÷À̸¦ Àß ¸ð¸£°Ú´Ù¸é À§ ¿¹Á¦¿Í ¶È°°Àº ¿¹Á¦¸¦ setState·Î ¸¸µé¾î º¸¸é ¹Ù·Î ´À³¥ ¼ö ÀÖ´Ù.

 

function Counter() {

  const [count, setCount] = useState(10)

 

  function inc(delta) {

    console.log("ÇöÀç Ä«¿îÆ® : " + count);

    setCount(count + delta)

  }

 

  function dec(delta) {

    console.log("ÇöÀç Ä«¿îÆ® : " + count);

    setCount(count - delta)

  }

 

  function twice() {

    console.log("ÇöÀç Ä«¿îÆ® : " + count);

    setCount(count * 2)

  }

 

  function half() {

    console.log("ÇöÀç Ä«¿îÆ® : " + count);

    setCount(count / 2)

  }

 

  function reset() {

    console.log("ÇöÀç Ä«¿îÆ® : " + count);

    setCount(10)

  }

 

  return (

    <>

      <h2>{count}</h2>

      <button onClick={() => dec(3)}>°¨¼Ò</button>&nbsp;

      <button onClick={() => inc(2)}>Áõ°¡</button>&nbsp;

      <button onClick={twice}>µÎ¹è</button>&nbsp;

      <button onClick={half}>Àý¹Ý</button>&nbsp;

      <button onClick={reset}>¸®¼Â</button>

    </>

  )

}

 

function App() {

  return (

    <>

      <Counter />

    </>

  );

}

 

¶È°°ÀÌ µ¿ÀÛÇÏÁö¸¸ setCount È£ÃâÀÌ ¿©±â Àú±â Èð¾îÁ® ÀÖ°í ¹Ýº¹µÈ´Ù. ÀÌ Á¤µµ ±Ô¸ð¿¡¼­´Â ÇÑ´«¿¡ º¸À̰ÚÁö¸¸ Äڵ尡 ±ä »óÅ¿¡¼­ count ·ÎÁ÷¿¡ ¹º°¡ ¹®Á¦°¡ ¹ß»ýÇßÀ» ¶§ setCount¸¦ ÀÏÀÏÀÌ Ã£¾Æ Á¡°ËÇÏ´Â°Ô ½¬¿î ÀÏÀÌ ¾Æ´Ï´Ù. ¶Ç »óŸ¦ º¯°æÇÒ ¶§¸¶´Ù setCount È£Ãâ Àü¿¡ ·Î±×¸¦ Ãâ·ÂÇÏ´Â Äڵ尡 ¹Ýº¹µÈ´Ù.

ÀÌ¿¡ ºñÇØ useReducer´Â »óŸ¦ º¯°æÇÏ´Â ¸ðµç Äڵ尡 ¸®µà¼­ ¾È¿¡ ¸ð¿© ÀÖÀ¸´Ï ÀÌ»óÀÌ ¹ß»ýÇØµµ Á¡°ËÇϱ⠽±°í º¯°æ ¹æ¹ýÀ» Ãß°¡Çϰųª ¼öÁ¤Çϱ⵵ ½±´Ù. ¸ðµç ¾×¼ÇÀ» ÇÑ ÇÔ¼ö¿¡¼­ ó¸®ÇϹǷΠswitch¹® ¾Õ¿¡ ·Î±×¸¦ Çѹø¸¸ Ãâ·ÂÇÏ¸é µÈ´Ù. inc, dec´Â Àμö¸¦ Áà¾ß Çϰí twice, half´Â Çڵ鷯¸¸ ÁöÁ¤ÇÏ¿© Çü½ÄÀÌ ´Ù¸¥µ¥ µð½ºÆÐÄ¡´Â ¾×¼ÇÀÌ ´Þ¶óÁú »Ó ÈÄÃâ ±¸¹®Àº Ç×»ó °°´Ù.

 

À¥ ¾Û¿¡¼­ »óÅ´ ±²ÀåÈ÷ Áß¿äÇϰí Á¤¹ÐÇÏ°Ô Àß ´Ù·ç¾î¾ß ÇÑ´Ù. µÎ °³ÀÇ »óÅ °ü¸® Èź¸´Ù ´õ ¹ßÀüµÈ »óÅ °ü¸® ¶óÀ̺귯¸®°¡ ¸¹´Ù. ¾ÆÁ÷Àº ¹è¿ï ´Ü°è°¡ ¾Æ´Ï¹Ç·Î Á» ´õ ¾Ë¾Æº» ÈÄ ´õ °í±Þ »óÅ °ü¸®¿¡ ´ëÇØ ¿¬±¸ÇØ º¸ÀÚ.