[TIL] React

Danbi Choยท2020๋…„ 4์›” 19์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
10/20

๐Ÿ“Œ What You Will Study
๋ฆฌ์•กํŠธ ์ฒซ ์ˆ˜์—…์„ ๋“ฃ๊ธฐ ์ „์— ํ•ด์•ผ ํ•  ๊ฒƒ๋“ค

step0. node, npm ์„ค์น˜

  • node๊ฐ€ ์„ค์น˜๋˜๋ฉด npm๋„ ํ•จ๊ป˜ ์„ค์น˜ ๋œ๋‹ค. (npm์€ ๋”ฐ๋กœ ์„ค์น˜ํ•  ํ•„์š” ์—†๋‹ค)
  • node ์„ค์น˜ ํ›„์— ํ„ฐ๋ฏธ๋„์— node -v, npm -v๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฒ„์ „ ์ •๋ณด๊ฐ€ ๋œจ๋ฉด ์ œ๋Œ€๋กœ ์„ค์น˜ ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ.

step 1. ๋ฆฌ์•กํŠธ?? ๊ฐ€๋ณ๊ฒŒ ํ›‘์–ด๋ณด๊ธฐ!

ํŽ˜์ด์Šค๋ถ์—์„œ ๋งŒ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Labrary(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋ž€?

  • ์žฌ์‚ฌ์šฉ์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์—†์• ๊ธฐ ์œ„ํ•ด ์–ธ์ œ๋“ ์ง€ ํ•„์š”ํ•œ ๊ณณ์—์„œ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก Class๋‚˜ Function์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ

Node(๋…ธ๋“œ)๋ž€?

  • ์›๋ž˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ตฌ๋™์ด ๋œ๋‹ค. ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋…ธ๋“œ๋ผ๊ณ  ํ•œ๋‹ค.

NPM (Node Package Manager / ๋…ธ๋“œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €)์ด๋ž€?

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ Node.js์˜ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์ด๋‹ค.

Component(์ปดํฌ๋„ŒํŠธ)๋ž€?

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

package.json ํŒŒ์ผ

  • ๋ฆฌ์•กํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

dependencies - ํŒจํ‚ค์ง€๋“ค์„ ๋ชจ์•„ ๋†“์€ ๊ฒƒ

    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-scripts": "3.4.1"   

scripts - npm run start ํ•  ๋•Œ ์‚ฌ์šฉ

๐Ÿ”– control + shift + ~ : vscode์—์„œ ํ„ฐ๋ฏธ๋„ ์—ด๊ธฐ ๋‹จ์ถ•ํ‚ค

  • noed_modules ํŒŒ์ผ
    ๋ฆฌ์•กํŠธ ์•ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    ๋ณดํ†ต .gitignore์— ํ‘œ์‹œํ•˜๊ณ  ๊นƒ์— ๊นƒ์— ํฌํ•จ ์‹œํ‚ค์ง€ ์•Š์Œ
    ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก  ๋ฐ›์•˜์„ ๋•Œ noed_modules ํด๋”๊ฐ€ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์šด ๋ฐ›์€ ์‚ฌ๋žŒ์ด package.json์— ์žˆ๋Š” ์ •๋ณด๋กœ ์ง์ ‘ ๋‹ค์šด ๋ฐ›์•„ install๋กœ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

step 2. react๊ธ€

1. React 1 - JSX

JSX

const hi = <p>Hi</p>;
  • ์œ„ ๋ฌธ๋ฒ•์€ JSX๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” JavaScript ํ™•์žฅ ๋ฒ„์ „์ด๋‹ค.
  • syntax extension for JavaScript๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. HTML๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฒผ๊ณ , javascript ํŒŒ์ผ ๋‚ด์—์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • JSX๋Š” JavaScript ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— js ํŒŒ์ผ ๋‚ด์— JSX ๋ฌธ๋ฒ•์ด ์žˆ์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด์„ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.

JSX element

  • HTML ๋ฌธ๋ฒ•์„ JavaScript ์ฝ”๋“œ ๋‚ด๋ถ€์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด JSX์ด๋‹ค.
  • .jsํŒŒ์ผ ์–ด๋””์—์„œ๋‚˜ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋„˜๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค.

JSX attribute

  • ํƒœ๊ทธ์— attribute(์†์„ฑ)์„ ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ๋Š” ""์Œ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์ค€๋‹ค. ์‹ค์ œ HTML์—์„œ ์“ฐ๋Š” attribute name(์†์„ฑ๋ช…)๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, class๋ฅผ ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์›๋ž˜ ์†์„ฑ๋ช…์€ class์ด์ง€๋งŒ JSX์—์„œ๋Š” className์„ ์‚ฌ์šฉํ•œ๋‹ค.

const hi = <input readOnly={true} />;

const myFavorite = {
    food: <li>์ƒ๋Ÿฌ๋“œ</li>,
    animal: <li>dog</li>,
    hobby: <li className="list-item">programming</li>
};

๐Ÿ”– Self-Closing Tag
JSX์—์„œ๋Š” ์–ด๋–ค ํƒœ๊ทธ๋ผ๋„ self closing tag๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
<input> ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ํƒœ๊ทธ๊ฐ€ ์š”์†Œ์ธ ๊ฒฝ์šฐ์—๋Š” <input />์™€ ๊ฐ™์ด ํ•ญ์ƒ /๋กœ ๋๋‚ด์ค˜์•ผ ํ•œ๋‹ค.
<div />์™€ <div></div>๋Š” ๊ฐ™์€ ํ‘œํ˜„

Nested JSX

1. (ํ•„์ˆ˜) ์†Œ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๊ธฐ

const good = (
<div>
    <p>hi</p>
</div>
);

์ค‘์ฒฉ๋œ ์š”์†Œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด () ์†Œ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์ค˜์•ผ ํ•œ๋‹ค.

2. (ํ•„์ˆ˜) ํ•ญ์ƒ ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋กœ ์‹œ์ž‘

const right = (
<div>
    <p>list1</p>
    <p>list2</p>
</div>
);

์ฒซ ์š”์†Œ๋Š” ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ ธ์•ผ ํ•œ๋‹ค.

Rendering

  • html์š”์†Œ(element), ๋˜๋Š” React ์š”์†Œ ๋“ฑ์˜ ์ฝ”๋“œ๊ฐ€ ๋ˆˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ทธ๋ ค์ง€๋Š” ๊ฒƒ์„ ๋ Œ๋”๋ง(rendering) ์ด๋ผ๊ณ  ํ…์ŠคํŠธํ•œ๋‹ค.
  • React ์š”์†Œ๊ฐ€ DOM node์— ์ถ”๊ฐ€๋˜์–ด ํ™”๋ฉด์— ๋ Œ๋”๋˜๋ ค๋ฉด ReactDOM.render ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    ์ฒซ ๋ฒˆ์งธ ์ธ์ž์—๋Š” JSX์š”์†Œ๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธฐ๊ณ , ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ํ•ด๋‹น ์š”์†Œ๋ฅผ ๋ Œ๋”ํ•˜๊ณ  ์‹ถ์€ container(๋ถ€๋ชจ์š”์†Œ)๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);

2. React 2 - Component

Component

  • component(์ปดํฌ๋„ŒํŠธ)๋ž€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ๋‹จ์œ„
  • ์ปดํฌ๋„ŒํŠธ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ, ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜๋ž‘ ๋น„์Šทํ•˜๋‹ค. ์ปดํฌ๋„ŒํŠธ๋„ input์„ ๋ฐ›์•„์„œ return ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • React ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” input์„ props๋ผ๊ณ  ํ•˜๊ณ  return์€ ํ™”๋ฉด์— ๋ณด์—ฌ์ ธ์•ผํ•  React์š”์†Œ๊ฐ€ return ๋œ๋‹ค.

Component ๋งŒ๋“ค๊ธฐ

  • React๋Š” Componenet๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
  • React์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ class๋‚˜ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ค ๋•Œ์—๋Š” ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค๋ฉด ์ข‹๊ณ , ์–ด๋–ค ๋•Œ์—๋Š” class๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

ํ•จ์ˆ˜๋กœ Welcome ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ํ•˜๊ธฐ

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

class๋กœ Welcome ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ํ•˜๊ธฐ

  • class๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด React.Component๋ฅผ extend ํ•ด์„œ ์ƒ์„ฑํ•œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ render() ๋ฉ”์„œ๋“œ๋Š” ๋ฌด์กฐ๊ฑด ์ •์˜ํ•ด์•ผ ํ•˜๊ณ , return๋„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
    ์›๋ž˜ component๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ๋” ์žˆ์ง€๋งŒ render()๋งŒ ํ•„์ˆ˜
class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

Component ์‚ฌ์šฉ

  • ์œ„์ฒ˜๋Ÿผ ์ •์˜ํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜/class ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํƒœ๊ทธ์ฒ˜๋Ÿผ <Welcome />์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ •์˜ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์›ํ•˜๋Š” attribute๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Welcome ์ปดํฌ๋„ŒํŠธ(ํ•จ์ˆ˜)์—์„œ parameter๋กœ ํ•ด๋‹น attribute๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์„ props๋ผ๊ณ  ํ•œ๋‹ค.
    props๋Š” property์˜ ์ค„์ž„๋ง์ด๋‹ค. .(dot)์œผ๋กœ ์†์„ฑ๋ช…์— ์ ‘๊ทผ๊ฐ€๋Šฅ, props.์†์„ฑ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
// 1. Welcome ์ปดํฌ๋„ŒํŠธ ์ •์˜
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

// 2. App ์ปดํฌ๋„ŒํŠธ ์ •์˜
function App() {
  return (
    <div>
      <Welcome name="Sara" />
      <Welcome name="Cahal" />
      <Welcome name="Edite" />
    </div>
  );
}

// 3. ํ™”๋ฉด์— React ์š”์†Œ ๊ทธ๋ ค์ฃผ๊ธฐ
ReactDOM.render(
  <App />,
  document.getElementById('root')
);
  1. Welcom ์ปดํฌ๋„ŒํŠธ: Welcome ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ์ธก(๋ถ€๋ชจ)์—์„œ name์ด๋ผ๋Š” attribute๋ฅผ ๋ถ€์—ฌ. props.name์˜ ๊ฐ’์„ ์‚ฌ์šฉ.
  2. App ์ปดํฌ๋„ŒํŠธ๊ฐ€ div๋กœ ๊ฐ์‹ธ์ ธ์žˆ๊ณ , <Welcome /> ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ธ๋ฒˆ ์‚ฌ์šฉ. name์ด๋ผ๋Š” attribute๋ฅผ ๋ถ€์—ฌ.
  3. ReactDOM.render ํ•จ์ˆ˜๋กœ React ์š”์†Œ๋ฅผ ๊ทธ๋ ค์ค€๋‹ค. root๋ผ๋Š” id๋ฅผ ์ฐพ์•„ <App /> ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ทธ๋ ค์ค€๋‹ค.

๋ฆฌ์•กํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

  1. ํ„ฐ๋ฏธ๋„์—์„œ ์›ํ•˜๋Š” ์œ„์น˜๋กœ ์ด๋™ํ•œ๋‹ค.
  2. npx create-react-app ํด๋”๋ช…์„ ์ž…๋ ฅํ•œ๋‹ค.
    Happy hackin!์ด ๋œจ๋ฉด ์™„๋ฃŒ๋œ ๊ฒƒ
  3. cd ๋งŒ๋“  ํด๋”๋ช…์œผ๋กœ ์ด๋™
    code . ์„ ์ž…๋ ฅ ํ•˜๋ฉด vscode์—์„œ ๊ทธ ํด๋”๋ฅผ ๋ฐ”๋กœ ์—ด์–ด ์ค€๋‹ค.

react-app ๋งŒ๋“ค๊ณ  ๋‚œ ํ›„

  • cra(create-react-app)๋กœ ๋งŒ๋“ค๊ณ  ๋‚œ ํ›„์— 3๊ฐœ์˜ ํŒŒ์ผ ์ง€์šด๋‹ค
    src ํŒŒ์ผ์— ์žˆ๋Š” App.test.js / serviceWorker.js / setupTests.js

  • index.js ๋ฆฌ์•กํŠธ์—์„œ ๊ฐ€์žฅ ์ตœ์ƒ์œ„ js ํŒŒ์ผ(๊ธฐ์ค€์ด ๋˜๋Š” ํŒŒ์ผ)
    ReactDOM.render(, document.getElementById('root'));

  • ์ปดํฌ๋„ŒํŠธ ์‹œ์ž‘ํ•  ๋•Œ ๋งจ ์œ„์— ํ•ญ์ƒ
    import React from 'react';๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค ๋ฌด์กฐ๊ฑด!

  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

//App.js
import React, { Component } from 'react';
import Box from "./Box";
import './App.css';

class App extends Component {
  render() {
    return (
      <div className="App">
        Hello
        <Box />
      </div>
    );
  }
  
}

export default App;
  • render() ๋ฉ”์†Œ๋“œ
    ์ปดํฌ๋„ŒํŠธ๋Š” JSX๋ฅผ return ํ•œ๋‹ค. JSX๋Š” html๋„ javascript๋„ ์•„๋‹ˆ๋‹ค ๊ธฐ๋Šฅ์€ html ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ๋งˆ๋‹ค css ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • App.js ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ๋ณด์—ฌ ์ฃผ๋ ค๋ฉด ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์— ์žˆ์–ด์•ผํ•œ๋‹ค.
    ๋ฆฌํ„ด๋ฌธ ์•ˆ์—๋Š” ํ•˜๋‚˜์˜ div๋งŒ ์žˆ์–ด์•ผ ๋œ๋‹ค. ๊ทธ div ์•ˆ์—์„œ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ div๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';


ReactDOM.render(<App />, document.getElementById('root'));
  • ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„๋“ค ์ง€์›Œ์ฃผ๊ณ  ์œ„ ์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

  • npm run start
    ๋งŒ๋“  react app์„ ์‹คํ–‰ ํ•ด์ค€๋‹ค.

profile
๋ฃฐ๋ฃจ๋ž„๋ผ! ๊ฐœ๋ฐœ์ž ๋˜๊ณ  ์‹ถ์–ด์š”๐Ÿ™ˆ

0๊ฐœ์˜ ๋Œ“๊ธ€