๐Ÿฑ #1. React.js

๋ฐ•์ค€์„ยท2022๋…„ 10์›” 13์ผ
1

React

๋ชฉ๋ก ๋ณด๊ธฐ
1/13
post-thumbnail

์˜ค๋Š˜์€ ๋ฆฌ์•กํŠธ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.

๋ฆฌ์•กํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ script src๋ฅผ ์ž„ํฌํŠธ ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์ž„ํฌํŠธ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

	<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>

React๋ž€?

React๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์„ ์–ธ์ ์ด๊ณ  ํšจ์œจ์ ์ด๋ฉฐ ์œ ์—ฐํ•œ Javascript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. "์ปดํฌ๋„ŒํŠธ"๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ž‘๊ณ  ๊ณ ๋ฆฝ๋œ ์ฝ”๋“œ์˜ ํŒŒํŽธ์„ ์ด์šฉํ•˜์—ฌ ๋ณต์žกํ•œ UI๋ฅผ ๊ตฌ์„ฑํ•˜๋„๋ก ๋•๋Š”๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด javascipt๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ React๋กœ ๋ฐ”๊ฟ” ์ž‘์„ฑํ•ด๋ณด๊ฒ ๋‹ค.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <span>Total Click : 0</span>
    <button id="btn">Click ME</button>

    <script>
        let counter =0;
        const button = document.getElementById("btn");
        const span = document.querySelector("span");
        function handleClick(){
            counter += 1;
            span.innerText = `Total Click : ${counter}`;
        }
        
        button.addEventListener("click", handleClick);
    </script>
</body>
</html>

๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ ๋งˆ๋‹ค ์ˆซ์ž๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ด ๊ฒƒ์„ React๋กœ ๋ฐ”๊พธ๋ฉด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๊ตณ์ด HTML์— ํƒœ๊ทธ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="root"></div>
    <script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
    <script>
        const root = document.getElementById("root");
        const h3 = React.createElement("h3", {
            id : "title",
            onMouseEnter:() => console.log("mouseenter")
        }, 
            "Hello i'm a span"
            );
        const btn = React.createElement("button",{
            onClick:() => console.log("im click"),
            style : {backgroundColor : "tomato"}
        },
        "Click Me");
        const container = React.createElement("div", null, [h3, btn])

        ReactDOM.render(container, root);
    </script>
</body>
</html>

React.createElement("ํƒœ๊ทธ", {id,class์ƒ์„ฑ, addEventListener, style}, "์ถœ๋ ฅํ•  ๋ฌธ์žฅ, ๋ฐฐ์—ด") ํ•œ์ค„๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  ReactDOM.render(container, root);์œผ๋กœ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์„ render ํ•œ๋‹ค.

์ด๋Ÿฐ ๋ฐฉ๋ฒ•์€ ๊ฐœ๋ฐœ์ž๋“ค์€ ์ž˜ ์“ฐ์ง€์•Š์ง€๋งŒ ๊ธฐ์ดˆ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

profile
์•ˆ๋…•ํ•˜์„ธ์š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ๊ธ€์„ ์ด์ „ ์ค‘์ž…๋‹ˆ๋‹ค.

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