React study/React JS로 영화 웹 서비스 만들기

[React] 1-4. JSX를 이용해 카운터 앱 만들기 (1)

카누가 좋아요 2023. 5. 23. 15:01

JSX를 이용하여 버튼 클릭 횟수를 알려주는 앱 만들기 (easier way)

📌 JSX

JSX는 Javascript를 확장한 문법이다.

HTML에서 사용한 문법과 흡사한 문법을 사용하여 기본적으로는 React Element를 만들 수 있게 해 준다. (React.createElement() 대체!)



📌 이전 코드와 JSX를 이용한 코드 비교

 

1. h3생성

 

이전 코드

const h3 = React.createElement(
  "h3", 
  { 
    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>
);

- element를 할당할 변수를 Title이라고 이름지어 주었고, ( ) 안에 생성할 element 관련 코드를 적어준다.

- h3를 생성할 것이므로 h3 tag를 작성하였다.

- content는 h3 tag 사이에 담겼다.

- property(id, onMouseEnter)는 HTML의 속성처럼 적어주었다. onMouseEnter 옆에는 함수를 적어주었는데, 이는 { } 안에 작성해 주었다.

 

2. button 생성

 

이전 코드

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

 

JSX를 이용한 코드

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

- style에 관한 코드 또한 { } 안에 적어주었다. 이때 중괄호를 2번 적어주었는데, 첫번째 중괄호는 JS 표현임을 나타내고, 두번째 중괄호는 객체 리터럴(변하지 않는 데이터 그 자체)을 의미한다.

나머지 코드 작성 방식은 h3때와 같다.



📌 Babel 사용하기

 

But, 위와 같이만 적어준다면 브라우저에서 에러가 발생하는 것을 볼 수 있다.

(Uncaught SyntaxError: Unexpected token '<')

이는 브라우저가 온전히 JSX를 이해하는 것이 아니기 때문에 발생한다.

따라서 우리는 JSX 코드를 이전 시간에 배웠던 좀 더 복잡한 JS 코드(React.createElement()와 같은 것들)로 변환시켜 브라우저가 이해하게 만들기 위해 Babel을 이용할 것이다.

 

Babel 사용법

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

* container에 content로 들어가는 요소의 배열 중 h3와 btn을 각각 Title과 Button으로 수정한다. (변수를 Title로 해 주었기 때문)

 

- 브라우저의 개발자 도구에서 script를 보면 우리가 Babel에 넘겨준 JSX 코드는 <body> tag 안의 <script> tag 안에, Babel이 브라우저가 읽을 수 있는 형태로 바꾼 코드는 <head> tag 안의 <script> tag 안에 들어 있는 것을 볼 수 있다.

 

결과적으로 이전 시간의 코드와 동일하게 작동하는 것을 볼 수 있다.

 

 

오늘의 코드

 

<!--버튼을 몇 번 클릭했는지 세는 어플이다.-->
<!DOCTYPE html>
<html>
  <body>
    <div id="root"></div>
  </body>
  <!--아래 두 줄의 코드는 리액트를 실행시키는 코드이다. 작성하면 console창에 react라고 작성했을 때 결과를 불러올 수 있어야 한다.-->
  <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 = (
      <button
        style={{
          backgroundColor: "tomato",
        }} 
        onClick={() => console.log("im clicked")}
      >
        Click me
      </button>
    );
    const container = React.createElement("div", null, [Title, Button]);
    ReactDOM.render(container, root);
  </script>
</html>

 

 

 

ReactJS로 영화 웹 서비스 만들기 – 노마드 코더 Nomad Coders

 

ReactJS로 영화 웹 서비스 만들기 – 노마드 코더 Nomad Coders

React for Beginners

nomadcoders.co