๐Ÿ“ ๊ฐœ์š”

React(๋ฆฌ์•กํŠธ)๋ž€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • React๋Š” ์„ ์–ธ์ ์ด๊ณ , ํšจ์œจ์ ์ด๊ณ , ์œ ์—ฐํ•˜๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ(Component)๋ผ๋Š” ์š”์†Œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ณต์žกํ•œ UI๋ฅผ ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์–ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก React๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ ?

๋ฌด์—‡๋ณด๋‹ค, ๋™์ (Dynamic)์ธ ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
์›น ํŽ˜์ด์ง€๋Š” ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค ํŽ˜์ด์ง€๋ฅผ ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•˜๊ณ , ์‚ฌ์šฉ์ž์˜ ์‘๋‹ต์— ๋”ฐ๋ผ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋ณ€ํ•ด์•ผ ํ•œ๋‹ค.

ํ•œ ๋งˆ๋””๋กœ, React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์ •๋ฆฌํ•˜์ž๋ฉด,,

" ์‚ฌ์šฉ์ž(User)์™€์˜ ์†Œํ†ต์„ UI๋กœ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ๋Œ€๊ทœ๋ชจ์˜ ์›นํŽ˜์ด์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. "


  • React์˜ Virtual DOM์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒํ•˜๊ณ  ๊ฐœ๋ฐœ์ž์˜ ์ž‘์—… ์†๋„๋ฅผ ๋†’์ธ๋‹ค.
    Virtual DOM์ด๋ž€ ๊ฐ€์ƒ์ ์ธ ํ‘œํ˜„์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ReactDOM๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ์‹ค์ œ DOM๊ณผ ๋™๊ธฐํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์ด๋‹ค.
  • React ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์€ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ ˆ์•ฝํ•œ๋‹ค.
  • ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํ†ตํ•ด ์•ˆ์ •์ ์ธ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    ๋‹จํ–ฅํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ์ผ์ •ํ•œ ์žฅ์†Œ์— ์žˆ๊ณ , ๊ทธ ์žฅ์†Œ์—์„œ๋งŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์˜คํ”ˆ์†Œ์Šค์ด๋ฉฐ, ํŽ˜์ด์Šค๋ถ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง€์†ํ•ด์„œ ๊ฐœ๋ฐœ๋˜๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๊ณต๊ฐœ๋œ๋‹ค.
  • Hooks ์ด๋ž€ ๊ฒƒ์„ ์ด์šฉํ•ด, ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ(State)๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก React ํŒŒ์ผ ๊ตฌ์กฐ

[ ์ถœ์ฒ˜ : elice ]


๐Ÿ“ React ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฐจ์ด์ 

React๋Š” ์•ฑ ์ž‘์„ฑ ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์•ฑ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹๊ณผ ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ™”ํ•˜๋Š” ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅธ  UI ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•œ ๊ทœ์น™์„ ์„ค์ •ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋ฐ˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ทœ์น™์„ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ์Šคํฌ๋ฆฝํŠธ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฌํ•œ ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋œ ์•ฑ์€ ์ž์œ ๋กœ์šธ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ๊ทธ๋งŒํผ ์ •ํ•ด์ง„ ๊ฒƒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค ๊ธธ์„ ์žƒ์–ด๋ฒ„๋ฆฌ๊ธฐ ์‰ฝ๋‹ค.

์ด ๋‘˜์˜ ๋Œ€ํ‘œ์ ์ธ ์ฐจ์ด์ ์„ ์ž ๊น ์ •๋ฆฌํ•˜์ž.

๐Ÿ’ก 1. ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฒ˜์Œ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

  • JS์—์„œ๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์ด HTML์„ ์š”์†Œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. ๋”ฐ๋กœ ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค.
<div>
    <h1>Grocery List</h1>
    <ul>
        <li>Milk</li>
        <li>Bread</li>
        <li>Eggs</li>
    </ul>
</div>
  • ๋ฐ˜๋ฉด React๋Š” JSX๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด UI๋ฅผ ์ •์˜ํ•œ๋‹ค.
  • JSX๋Š” HTML ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š”, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‹ค.
/*
๋‹ค์Œ์€ GroceryList ๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” 
์ดํ›„ React DOM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด "๋žœ๋”๋ง(Rendering)"๋˜์–ด ํ™”๋ฉด์— ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋‹ค.
*/

function GroceryList(props) {
    return (
        <div>
            <h1>Grocery List</h1>
            <ul>
                <li>Milk</li>
                <li>Bread</li>
                <li>Eggs</li>
            </ul>
        </div>
    )
};

 

๐Ÿ’ก ์•ฑ์—์„œ ๊ธฐ๋Šฅ์ด ๋ถ„ํ• ๋˜๋Š” ๋ฐฉ์‹

  • JS๋Š” ์•ฑ์˜ ๊ธฐ๋Šฅ ๋˜๋Š” UI์˜ ์š”์†Œ๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ์—†๋‹ค.
    ๊ธฐ๋ณธ์ ์ธ ์ถœ๋ ฅ์€ HTML ํŒŒ์ผ์— ์ •์˜ํ•œ๋‹ค.
<div>
    <h1>Grocery List</h1>
    <ul id="grocery-list">
        <li>Milk</li>
        <li>Bread</li>
        <li>Eggs</li>
    </ul>
</div>

๊ทธ๋ฆฌ๊ณ  ๋ชฉ๋ก์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ(.js)์— ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.

function addItemToList() {

  // Add item

}

์ด๋ ‡๊ฒŒ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ์›์น™์— ๋”ฐ๋ผ, ํ™”๋ฉด์— ์ถœ๋ ฅ์„ ํ•˜๋Š” HTML๊ณผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ถ„๋ฆฌ๋˜๋„๋ก ์„ค๊ณ„ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€, ์•ฑ์ด ์ ์ฐจ ๋ฐฉ๋Œ€ํ•ด์ง€๊ณ , ๋ณต์žกํ•ด์ง์— ๋”ฐ๋ผ, ์ปจํŠธ๋กค ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐ˜๋ฉด, React๋Š” ์œ„์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์œ ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
function GroceryList(props) {
    function addItem() {
        // Add Item
    }

    return (
        <div>
            <h1>Grocery List</h1>
            <ul>
                <li>Milk</li>
                <li>Bread</li>
                <li>Eggs</li>
            </ul>
        </div>
    )
};

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด, ์•ฑ์ด ๋ฐฉ๋Œ€ํ•ด์ง€๊ณ , ๋ณต์žกํ•ด์ ธ๋„, ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ณ , ๋งŒ๋“ค์–ด ๋†“์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์•ฑ ์ „์ฒด๊ฐ€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

๐Ÿ’ก 3. ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•

  • JS์—์„œ๋Š” ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ DOM์— ์ €์žฅ๋œ๋‹ค.
    DOM์€ ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด์—์„œ ๋งŒ๋“ค๊ณ , ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ „์ฒด HTML์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ…์ŠคํŠธ ๋ฐ•์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋ฉด, ํ•ด๋‹น ๋‚ด์šฉ์ด ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ๋‹ค.
<input type="text" placeholder="Enter an item" id="item-input" />

๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ’์„ ์ž…๋ ฅํ•  ๋•Œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋จผ์ € DOM์—์„œ ๊ฐ’์„ ์ฐพ์€ ๋‹ค์Œ ์ถ”์ถœํ•˜์—ฌ, ํ•ด๋‹น ์ž…๋ ฅ ์ƒ์ž์— ๊ฐ’์„ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

const input = document.getElementById("item-input"); console.log(input.value);

์ง€๊ธˆ์€, ์ž‘์€ ์˜ˆ๋ผ, ํŽธ๋ฆฌํ•ด๋ณด์ด์ง€๋งŒ, ์ž…๋ ฅ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
๋งŒ์•ฝ id๊ฐ€ ๋‹ค๋ฅธ ์ž…๋ ฅ ํ…์ŠคํŠธ ๋ฐ•์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด, id ๋ณ„๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

  • ๋ฐ˜๋ฉด, React๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์‹ ์˜ ์ƒํƒœ(State)๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์‹œ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์˜ ํ…์ŠคํŠธ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋จผ์ € ์ƒํƒœ๋ฅผ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.
const [itemInput, setItemInput] = useState("");		// ํ˜•์‹ ํ™•์ธํ•˜๊ธฐ

์ž…๋ ฅ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์„ค์ •์ด ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, HTML ์ฝ”๋“œ๋Š” ์กฐ๊ธˆ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

<input type="text" placeholder="Enter an item" value={itemInput} onChange={e => 
setItemInput(e.target.value)} />

ํ•˜์ง€๋งŒ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด, ๊ฐ„๋‹จํ•˜๊ฒŒ ํ…์ŠคํŠธ ๋ฐ•์Šค์˜ ํ˜„์žฌ ๊ฐ’์„ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

console.log(itemInput);

ํ˜„์žฌ ์•ฑ์˜ ์ƒํƒœ(State)๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด DOM์— ์˜์กดํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ, React๊ฐ€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ด์ ์€ ์•ฑ์ด ์„ฑ์žฅํ• ์ˆ˜๋ก(์ปค์งˆ์ˆ˜๋ก) ๊ทธ ํšจ๊ณผ๋Š” ์ปค์ง„๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜์— ์•ฑ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ React๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋น„ํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ด์  ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ ์•ฑ์ด ๋ณต์žกํ• ์ˆ˜๋ก ํ•ด๋‹น ์ด์ ์ด ์ปค์ง„๋‹ค.

 

๐Ÿ’ก 4. UI ์—…๋ฐ์ดํŠธ ๋ฐฉ๋ฒ•

๋งˆ์ง€๋ง‰์€, ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ, ์•ฑ์ด ์‚ฌ์šฉ์ž์— ๋ฐ˜์‘ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ƒˆ๋กœ์šด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋Š” UI ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹์ด๋‹ค.

  • JS์—์„œ๋Š” ํ…์ŠคํŠธ ๋ฐ•์Šค ์˜†์— ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
<input type="text" placeholder="Enter an item" id="item-input" /> <button id="add-button">Add</button>

๊ทธ๋Ÿฐ ๋‹ค์Œ, ํ•ด๋‹น ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๊ฒƒ์— ์‘๋‹ตํ•˜๊ธฐ ์œ„ํ•ด DOM์—์„œ ๋ฒ„ํŠผ์„ ์ฐพ๋Š”๋‹ค.

const addButton = document.getElementById("add-button");

๊ทธ๋ฆฌ๊ณ , ๊ทธ ๋ฒ„ํŠผ์— click listener๋ฅผ ์„ค์ •ํ•œ๋‹ค.

addButton.addEventListener("click", function() {

  // Append item

})

๊ทธ๋Ÿฐ ๋‹ค์Œ, ๋ฆฌ์Šค๋„ˆ ๋‚ด๋ถ€์—์„œ, ๋จผ์ € ์ด์ „๊ณผ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ, ์ž…๋ ฅ ์ƒ์ž์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ, ์‹๋ฃŒํ’ˆ ๋ชฉ๋ก์— ์ƒˆ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด, DOM์—์„œ ๋ชฉ๋ก์„ ์ฐพ๊ณ , ์ถ”๊ฐ€ ํ•  ์ƒˆ ํ•ญ๋ชฉ์„ ๋งŒ๋“  ๋‹ค์Œ, ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ชฉ๋ก ๋์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ( ์ด๋ ‡๊ฒŒ๋งŒ ๋ด๋„, ์ƒ๋‹นํžˆ ๋ณต์žกํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. )

  • ๋ฐ˜๋ฉด, React๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜์˜ ์ „์ฒด ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
const [items, setItems] = useState(["Milk", "Bread", "Eggs"]);

๊ทธ๋ฆฌ๊ณ  ๋ณ€์ˆ˜์˜ ๊ฐ ํ•ญ๋ชฉ์„ ๋งคํ•‘(Mapping)ํ•œ ํ›„, ๊ทธ์— ๋Œ€ํ•œ ๋ชฉ๋ก ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ JSX์— ํ‘œ์‹œํ•œ๋‹ค.

// ํ˜•์‹, ํ™•์ธํ•˜๊ธฐ

<ul>
    {items.map(item => (
        <li key={item}>{item}</li>
    ))}
</ul>

๊ทธ๋Ÿฐ ๋‹ค์Œ, ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ๋‹ค. click listener๋Š” ํ•„์š”ํ•˜์ง€ ์•Š๊ณ , onClick ๋ฒ„ํŠผ ์ž์ฒด์— ์†์„ฑ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

<button onClick={addItem}>Add React</button>

์ด ํ•จ์ˆ˜์— ์ถ”๊ฐ€ํ•  ๊ฒƒ์€ setItem ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๊ธฐ์กด ํ•ญ๋ชฉ์— ์ƒˆ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

function addItem() { console.log(itemInput); setItems([...items, itemInput]); }

์ด๋กœ์จ, React๋Š” ๋ชฉ๋ก์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์ž๋™์œผ๋กœ, ๋“ฑ๋กํ•˜๊ณ , UI๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

์ด ์—…๋ฐ์ดํŠธ ๊ธฐ๋Šฅ์€ React๊ฐ€ ๊ฐ€์ง„, ์œ„๋Œ€ํ•จ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

+ Recent posts