React JS를 사용하는 이유?

React JS는 UI를  interactive하게 해준다!

Vanilla JS

  • html 요소를 먼저 생성
  • 먼저 생성한 html 요소를 JS에서 지정 및 조작
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Vanilla</title>
  </head>
  <body>
    <h3>Total clicks: 0</h3>
    <button id="btn">Click me</button>
  </body>
  <script>
    let counter = 0;
    const button = document.querySelector("#btn");
    const h3 = document.querySelector("h3");
    function handdleClick() {
      counter = counter + 1;
      h3.innerText = `Total clicks: ${counter}`;
    }
    button.addEventListener("click", handdleClick);
  </script>
</html>

React JS

  • html에 직접 작성 x
  • React object를 먼저 생성, ReactDOM으로 React object를 html에 작성

얻을 수 있는 효과

  • React JS가 결과물인 html을 업데이트 가능 => 유저에게 보여질 내용을 컨트롤할 수 있다
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Begin React</title>
  </head>
  <body>
    <div id="root"></div>
  </body>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.production.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js"></script>
  <script>
    const root = document.getElementById("root");
    const span = React.createElement(
      "span",
      { id: "sexy-span", style: { color: "red" } },
      "Hello I am a span"
    );
    ReactDOM.render(span, root);
  </script>
</html>
addEventListner를 속성처럼 부여할 수 있음
const btn = React.createElement(
  "button",
  {
    onClick: () => console.log("im clicked"),
  },
  "Click me"
);

 


JSX

  • React 요소를 편하게, 직관적으로 작성할 수 있게 해줌
  • 코드를 브라우저가 이해할 수 있게 Babel를 사용하여 변환해줘야 함
JSX 적용 전
const span = React.createElement(
  "span",
  {
    id: "title",
    onMouseEnter: () => console.log("mouse enter"),
  },
  "Hello I am a span"
);
const btn = React.createElement(
  "button",
  {
    onClick: () => console.log("im clicked"),
    style: {
      backgroundColor: "tomato",
    },
  },
  "Click me"
);
JSX 적용 후
const Title = (
  <span id="title" onMouseEnter={() => console.log("mouse enter")}>
    Hello I am a span
  </span>
);
const Button = (
  <button
    onClick={() => console.log("im clicked")}
    style={{
      backgroundColor: "tomato",
    }}
  >
    Click me
  </button>
);

Babel

  • JSX를 브라우저가 이해할 수 있도록 babel-standalone 설치
  • 기존 script 타입을 "text/babel"로 지정
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.22.9/babel.min.js"></script>
<script type="text/babel">
  ...
</script>

Container 안에 컴포넌트 넣기

각 컴포넌트를 모두 함수 형태로 바꿔주기 (각 컴포넌트는 대문자로 시작해야함)
const Title = () => (
  <span id="title" onMouseEnter={() => console.log("mouse enter")}>
    Hello I am a span
  </span>
);
const Button = () => (
  <button
    onClick={() => console.log("im clicked")}
    style={{
      backgroundColor: "tomato",
    }}
  >
    Click me
  </button>
);

 

아래 형태로 넣어주기 (각 컴포넌트는 대문자로 시작해야함, 소문자로 사용할 경우 기존의 태그로 인식)
const Container = () => (
  <div>
    <Title />
    <Button />
  </div>
);
ReactDOM.render(<Container />, root);

'React' 카테고리의 다른 글

[React 기초] 06. 예제 - Todo List  (0) 2023.08.10
[React 기초] 05. effects  (0) 2023.08.10
[React 기초] 04. create-react-app  (0) 2023.08.10
[React 기초] 03. Props  (0) 2023.08.02
[React 기초] 02. State  (0) 2023.08.02

+ Recent posts