Front-end/React

[노마드코더] #1 Introduction

성중 2021. 11. 13. 23:54

Why React?

  • 2021년 말 기준 상위 1만개 웹사이트 중 44.76%가 React JS 사용
  • 페이스북의 막대한 투자와 지속적인 업데이트
  • 프론트엔드 JS 라이브러리 중 가장 큰 JS 커뮤니티

Start React!

<!DOCTYPE html>
<html>
    <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></script>
</html>

CRA 없이 React를 사용하려면 우선 index.html에서 React JS와 ReactDOM 코드를 import해준다

React JS는 element를 생성하고 이벤트 추가, ReactDOM은 element들을 HTML로 바꿔준다

<!DOCTYPE html>
<html>
    <body>
        <div id="root"></div> <!--여기에 ReactDOM이 element들을 랜더링-->
    </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 btn = React.createElement(
            "button",
            {
                id: "title",
                onClick: () => console.log("im clicked"),
                style: {
                    backgroundColor: "tomato",
                },
            },
            "Click me"
        );
        const container = React.createElement("div", null, [btn]);
        ReactDOM.render(container, root); 
    </script> <!--element들을 root에 랜더링-->
</html>
  • element는 createElement로 생성되며 ‘HTML 태그/props를 포함한 object/content’로 구성
  • ReactDOM이 body의 id가 root인 비어있는 div에 생성된 element들을 랜더링한다
  • addEventListener나 getElementById/querySelector 등 없이도 Interactive UI 구현

 

* createElement 역시 현재는 전혀 사용하지 않는 초기 방식이다!

JSX

createElement를 JSX로 대체할 수 있는데, 변환하기 위해서 Babel을 추가한다

<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">

상단의 코드를 아래와 같이 HTML과 유사한 JSX로 변환할 수 있다

<!DOCTYPE html>
<html>
    <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 btn = React.createElement(
            "button",
            {
                id: "title",
                onClick: () => console.log("im clicked"),
                style: {
                    backgroundColor: "tomato",
                },
            },
            "Click me"
        );
        */
        const Button = () => (
        <button 
            style={{ 
                backgroundColor: "tomato", 
            }} 
            onClick={()=>console.log("im clicked")}
            >
            Click me
        </button>
        );
        /*
        const container = React.createElement("div", null, [btn]);
        ReactDOM.render(container, root); 
        */
        const Container = () => <div>
                <Button/>
            </div>
        ReactDOM.render(<Container/>, root); 
    </script>
</html>

* 컴포넌트는 반드시 대문자로 시작!

 

arrow function 변환 (둘이 동일한 의미이다!)

        const Button = () => (
        <button 
            style={{ 
                backgroundColor: "tomato", 
            }} 
            onClick={()=>console.log("im clicked")}
            >
            Click me
        </button>
        );

        function Button() {
            return(
                <button 
                    style={{ 
                        backgroundColor: "tomato", 
                    }} 
                    onClick={()=>console.log("im clicked")}
                    >
                    Click me
                </button>
            );
        }

 

본 내용은 노마드코더의 'ReactJS로 영화 웹 서비스 만들기'를 바탕으로 작성되었습니다