JSX

1. JSX๋ž€?

  • React์—์„œ UI๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” JavaScript๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•์ด๋ฉฐ, ์ด๋ฅผ ํ™œ์šฉํ•ด React element๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

  • 'Babel'๋กœ JSX๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” JavaScript๋กœ compile -> JavaScript๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ๊ณ  ํ™”๋ฉด์— ๋ Œ๋”๋ง ๊ฐ€๋Šฅ

  • React์—์„œ๋Š” DOM๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ CSS, JSX ๋ฌธ๋ฒ•๋งŒ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ. ์ฆ‰, JavaScript๋งŒ์œผ๋กœ ๋งˆํฌ์—… ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ DOM์— ๋ฐฐ์น˜ ๊ฐ€๋Šฅ (๋‹จ, JSX๋Š” HTML์ด ์•„๋‹ˆ๊ธฐ์— Babel๋กœ compile ํ•„์š”)

2. JSX ๋ฌธ๋ฒ•

  • ํ•˜๋‚˜์˜ ์—˜๋ฆฌ๋จผํŠธ ์•ˆ์— ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํฌํ•จ. ์ตœ์ƒ์œ„์—์„œ opening tag์™€ closing tag๋กœ ๊ฐ์‹ธ์ฃผ์–ด์•ผ ํ•จ

    <div>
      <div>
        <h1>Hello</h1>
      </div>
      <div>
        <h2>World</h2>
      </div>
    </div>
  • ์—˜๋ฆฌ๋จผํŠธ ํด๋ž˜์Šค ์‚ฌ์šฉ ์‹œ, className์œผ๋กœ ํ‘œ๊ธฐ

    <div className = "greeting">Hello</div>
  • JavaScript ํ‘œํ˜„์‹ ์‚ฌ์šฉ ์‹œ, ์ค‘๊ด„ํ˜ธ ์ด์šฉ

    function App () {
      const name = 'Ella Choi';
      return (
        <div>
        Hello, {name}!
        </div>
      );
    }
  • ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘

    function Hello() {
      return <div>Hello!</div>
    }
    
    function HelloWorld() {
      return <Hello />;
    }
  • ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์—๋Š” if๋ฌธ์ด ์•„๋‹Œ, ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

    <div>
      {
        (1+1 === 2) ? (<p>์ •๋‹ต</p>) : <p>ํƒˆ๋ฝ</p>)
      }
    </div>
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ HTML ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ‘œ์‹œํ•  ๋•Œ, map()ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ 'key'JSX ์†์„ฑ์„ ๋„ฃ์–ด์•ผ ํ•จ.

    const posts = [
      {id: 1, title: 'Hello World', content: 'Welcome to learning React!'},
      {id: 2, title: 'Installation', content: 'You can install React from npm'}
    ];
    
    function Blog() {
      const content = posts.map((post) =>
        <div key = {post.id}>
        <h3>{post.title}</h3>
        <p>{post.content}</p>
        </div>
      );
      return (
        <div>
        {content}
        </div>
      );
    }
  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋Š” ๊ฐ๊ฐ ๋ณ€์ˆ˜์— ๋‹ด๊ธธ ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜์˜ JSX ํ‘œํ˜„์‹์ž„.

    const Hello - () => {
      return (
        [<div>์•ˆ๋…•ํ•˜์„ธ์š”</div>, <div>๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค</div>]
      )
    }

Last updated