Post

๐ŸŽฌ ReactJS๋กœ ์˜ํ™” ์›น ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ (01) - JSX

JSX

JSX๋ž€?

JavaScript๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•


๊ธฐ์กด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ jsx๋กœ ๋ฐ”๊ฟ”๋ณด์ž!

  • ๊ธฐ์กด javaScript ์ฝ”๋“œ (์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์˜ค๋ž˜๋œ ๋ฐฉ์‹)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html lang="en">
  <body>
    <div id="root"></div>
  </body>
  <script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
  <script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
  <script>
    const root = document.getElementById("root");
    const h3 = React.createElement(
      "h3",
      {
        id: "title",
        onMouseEnter: () => console.log("mouse enter")
      },
      "Hello I'm a title"
    );

    const btn = React.createElement(
      "button",
      {
        onClick: () => console.log("im clicked"),
        style: {
          backgroundColor: "tomato"
        }
      },
      "Click me"
    );

    // ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ํ•œ๋ฒˆ์— render
    const container = React.createElement("div", null, [h3, btn]);
    ReactDOM.render(container, root);
  </script>
</html>


  • jsx ์ด์šฉํ•œ ์ฝ”๋“œ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!DOCTYPE html>
<html lang="en">
    <body>
        <div id="root"></div>
    </body>
    <script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
    <script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
    <script type="text/babel">
        const root = document.getElementById("root");
        const Title = () => (
            <h3 id="title" onMouseEnter={() => console.log("mouse enter")}>
                Hello I'm a title
            </h3>
        );
       const Button = () => (
        <buttonstyle="backgroundColor: tomato;"
            onClick={() => console.log("im clicked")}
        >
            Click me
        </button>
       );

       const Container = () => (
            <div>
                <Title />
                <Button />
            </div>
        );
       ReactDOM.render(<Container />, root);
    </script>
</html>
  • JSX๋Š” ๊ธฐ์กด์˜ createElement์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์ผ๋ฐ˜์ ์ธ HTML์ž‘์„ฑ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค
  • onMouseEnter์™€ ๊ฐ™์€ property๋“ค๋„ ๋งˆ์น˜ ํƒœ๊ทธ๊ฐ€ ๊ฐ€์ง„ ํ•˜๋‚˜์˜ ์†์„ฑ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ํƒœ๊ทธ ์•ˆ์— ์ถ”๊ฐ€ํ•จ

๊ทธ๋Ÿฐ๋ฐ !
์ €๋ ‡๊ฒŒ๋งŒ ์ž‘์„ฑํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค ๐Ÿ˜•

image

๊ทธ ์ด์œ ๋Š” ๋ฐ”๋กœ
๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์˜จ์ „ํžˆ JSX๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ!
๊ทธ๋ž˜์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ JSX๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก Babel์ด๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•œ๋‹ค
Babel์€ JSX๋กœ ์ ์€ ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•จ

Babel์˜ Try it out ํŽ˜์ด์ง€์—์„œ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ JSX ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค! image

๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๊ธฐ์กด์˜ javaScirpt๋กœ ์ž‘์„ฑํ–ˆ๋˜ ์ฝ”๋“œ์™€ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค

์•”ํŠผ !
์ข€์ „์˜ ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด babel์„ ์„ค์น˜ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค
์ผ๋‹จ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ babel์„ ์ ์šฉ์‹œ์ผœ๋ณด์ž

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html lang="en">
    <body>
        <div id="root"></div>
    </body>
    <script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
    <script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
    <!-- Babel ์ ์šฉ์„ ์œ„ํ•ด ์ฝ”๋“œ ์ถ”๊ฐ€-->
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
    <!-- Babel ์ ์šฉ์„ ์œ„ํ•ด ์ฝ”๋“œ ์ถ”๊ฐ€-->
    <script type="text/babel">
        const root = document.getElementById("root");
        const Title = () => (
            <h3 id="title" onMouseEnter={() => console.log("mouse enter")}>
                Hello I'm a title
            </h3>
        );
       const Button = () => (
        <buttonstyle="backgroundColor: tomato;"
            onClick={() => console.log("im clicked")}
        >
            Click me
        </button>
       );

       const Container = () => (
            <div>
                <Title />
                <Button />
            </div>
        );
       ReactDOM.render(<Container />, root);
    </script>
</html>

์ œ๋ชฉ ์—†๋Š” ๋™์˜์ƒ - Clipchamp๋กœ ์ œ์ž‘ (5)


์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค !

This post is licensed under CC BY 4.0 by the author.