๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/React

[ํ•œ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ ๋จน๋Š” ๋ฆฌ์•กํŠธ] - ํ”„๋กœ์ ํŠธ 1 (์นด์šดํ„ฐ ์•ฑ)

by YeonBu 2024. 11. 25.
728x90

 


๊ฐ•์˜ - Section 6 : ํ”„๋กœ์ ํŠธ 1. ์นด์šดํ„ฐ ์•ฑ

์œ ๋ฐ๋ฏธ : https://www.udemy.com/course/winterlood-react-basic/

์ธํ”„๋Ÿฐ : https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%EB%A6%AC%EC%95%A1%ED%8A%B8

 

[2024] ํ•œ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ ๋จน๋Š” ๋ฆฌ์•กํŠธ(React.js) : ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „๊นŒ์ง€ ๊ฐ•์˜ | ์ด์ •ํ™˜ Winterlood - ์ธํ”„๋Ÿฐ

์ด์ •ํ™˜ Winterlood | ๊ฐœ๋…๋ถ€ํ„ฐ ๋…ํŠนํ•œ ํ”„๋กœ์ ํŠธ๊นŒ์ง€ ํ•จ๊ป˜ ๋‹ค๋ค„๋ณด๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋ฆฌ์•กํŠธ๋ฅผ ์ด ๊ฐ•์˜๋กœ ํ•œ ๋ฒˆ์— ๋๋‚ด์š”. ํ•™์Šต์€ ์งง๊ฒŒ, ์‘์šฉ์€ ๊ธธ๊ฒŒ 17์‹œ๊ฐ„ ๋ถ„๋Ÿ‰์˜ All-in-one ๊ฐ•์˜!, ๋ฆฌ์•กํŠธ, ํ•œ ๊ฐ•์˜๋กœ

www.inflearn.com


 

 

 

ํ”„๋กœ์ ํŠธ1. ์นด์šดํ„ฐ ์•ฑ

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ ๋ฐ ์ค€๋น„

 

 

* ์‚ฌ์šฉ์ž๊ฐ€ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ๋Š” ์นด์šดํ„ฐ ํ”„๋กœ์ ํŠธ

* ํ˜„์žฌ ์นด์šดํ„ฐ ํ‘œ์‹œ ์˜์—ญ์€ 'Viewer', ์ฆ๊ฐ€ ๋ฐ ๊ฐ์†Œ ๋ฒ„ํŠผ์€ 'Controller'์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ๊ฐ ๋งŒ๋“ค์–ด์„œ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋‹ค.

 

 

 

ํ”„๋กœ์ ํŠธ1. ์นด์šดํ„ฐ ์•ฑ

UI ๊ตฌํ˜„ํ•˜๊ธฐ

 

* App.jsx

function App() {

  return (
    <div className="App">
      <h1>Simple Counter</h1>
      <section>
        <Viewer />
      </section>
      <section>
        <Controller />
      </section>
    </div>
  )
}

export default App

 

 

* Viewer.jsx

const Viewer = () => {
    return (
        <div>
            <div>ํ˜„์žฌ ์นด์šดํŠธ : </div>
            <h1>0</h1>
        </div>
    )
}

export default Viewer;

 

 

*Controller.jsx

const Controller = () => {
    return (
        <div>
            <button>-1</button>
            <button>-10</button>
            <button>-100</button>
            <button>+100</button>
            <button>+10</button>
            <button>+1</button>
        </div>
    )
}

export default Controller;

 

 

 

ํ”„๋กœ์ ํŠธ1. ์นด์šดํ„ฐ ์•ฑ

๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

 

* ํ˜„์žฌ ์นด์šดํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” state๋Š” ์–ด๋””์— ์ถ”๊ฐ€๋ฅผ ํ•˜๋ฉด ์ข‹์„๊นŒ?

 - ์ •๋‹ต์€ ํ˜„์žฌ ์นด์šดํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” Viewer๊ฐ€ ์•„๋‹ˆ๋ผ App ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ์ด์œ ๋Š” App์ด ๋ถ€๋ชจ์ปดํฌ๋„ŒํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ(Viewer, Controller)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

*App.jsx

import { useState } from 'react'

function App() {

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

  const onClickButton = (value) => {
    setCount(count + value);
  }

  return (
    <div className="App">
      <h1>Simple Counter</h1>
      <section>
        <Viewer count = {count}/>
      </section>
      <section>
        <Controller onClickButton = {onClickButton}/>
      </section>
    </div>
  )
}

export default App

 

 

* Viewer.jsx

const Viewer = ({count}) => {
    return (
        <div>
            <div>ํ˜„์žฌ ์นด์šดํŠธ : </div>
            <h1>{count}</h1>
        </div>
    )
}

export default Viewer;

 

 

* Controller.jsx

const Controller = ({onClickButton}) => {
    return (
        <div>
            <button onClick={() => onClickButton(-1)}>-1</button>
            <button onClick={() => onClickButton(-10)}>-10</button>
            <button onClick={() => onClickButton(-100)}>-100</button>
            <button onClick={() => onClickButton(+100)}>+100</button>
            <button onClick={() => onClickButton(+10)}>+10</button>
            <button onClick={() => onClickButton(+1)}>+1</button>
        </div>
    )
}

export default Controller;

 

 

* ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด์„œ ์•Œ๊ฒŒ๋œ ๊ฒƒ์€ React๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

   ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ React์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ๋ฅด๋Š” ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. React์—์„œ๋Š” 

   ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ด๋ฅผ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ props๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ• ๋‹ค.

 

๋ฐ˜์‘ํ˜•