젠싱 싱예

연구일자: 2023.03.05


<!DOCTYPE html>
<html>
<body>
    <div id="root"></div>
</body>
<script src="https://unpkg.com/[email protected]/umd/react.production.min.js"></script>
<script src="https://unpkg.com/[email protected]/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");

// Title
    const Title = () => (
        <h3
            id="title"
            onMouseEnter={() => console.log("mouse enter")}
        >
            Hello I'm a title
        </h3>
    );


// Button
    const Button = () => (
        <button
            style={{ backgroundColor: "tomato"}}
            onClick={() => console.log("i'm cliked")}
        >
            Click me!!!
        </button>
    );


// 앞에서 만들어 준 Title과 Button을 Container 안에 포함시킴
    const Container = (
        <div>
            <Title />
            <Button />
        </div>
    );

// root 안에 Container를 넣어 렌더링
    ReactDOM.render(Container, root);

</script>

</html>

주석

<!DOCTYPE html>
<html>

<body>
    <!-- 리액트를 사용해서 태그를 생성할 것이기 때문에 body에 작성하지 않아도 된다. -->
    <div id="root"></div>
</body>
<!-- 리액트 사용을 위한 스크립트 (필수로 적어주어야 한다.) -->
<!-- react-dom은 React element를 HTML에 두는 역할을 한다. -->
<script src="https://unpkg.com/[email protected]/umd/react.production.min.js"></script>
<script src="https://unpkg.com/[email protected]/umd/react-dom.production.min.js"></script>
<!-- Babel을 이용하여 코드를 변환 -->
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">


    // 리액트로 HTML 태그 만들기
    const root = document.getElementById("root");


    // 오래된 방식 => 이렇게 안쓰고 대부분 JSX로 쓰게된다.
    // "h3" ==> HTML의 태그 기능임.
    // const h3 = React.createElement(
    //     "h3",
    //     {
    //         id:"title",
    //         onmouseenter: () => console.log("mouse enter"),
    //     },
    //     "Hello I'm a span"
    // );




    // JSX방식
    const Title = () => (
        <h3
            id="title"
            onMouseEnter={() => console.log("mouse enter")}
        >
            Hello I'm a title
        </h3>
    );

    // function 으로
    // function Title() {
    //     return (
    //         <h3
    //              id= "title"
    //              onmouseenter ={() => console.log("mouse enter")}>
    //             Hello I'm a title
    //          </h3>
    //     );
    // }



    // ()=> 는 arrow function 이라고 한다.
    // ()=>  를 붙여주면 Button 이 함수가 된다. 
    const Button = () => (
        <button
            style={{ backgroundColor: "tomato"}}
            onClick={() => console.log("i'm cliked")}
        >
            Click me!!!
        </button>
    );




    // button 이란 이름은 굳이 html의 태그 이름과 일치할 필요가 없다. 하고싶은걸로 하면 됨.
    // const btn = React.createElement(
    //     "button", 
    //     {
    //     onClick : () => console.log("i'm cliked"),
    //    //onClick : () => alert("ddd"),
    //    style: {
    //     backgroundColor:"tomato",
    //    },
    // },
    // "click me"
    // );


    // Container 를 대문자로 적어주어야 한다.
    // <Title /> 처럼 컴포넌트의 첫 글자는 반드시 대문자여야 함. (소문자로 적게되면 HTML태그로 인식해버림.)
    const Container = (
        <div>
            <Title />
            <Button />
        </div>
    );


    // rander => '사용자에게 보여준다' 라는 의미
    // JSX는 보기 쉽게 코드를 분리한 뒤에 함께 렌더링한다.
    // root 안에 container를 넣어 렌더링
    ReactDOM.render(Container, root);

</script>

</html>