← 돌아가기

Step 3: useState 기본

🔨 실습 1: 텍스트 변경

Before (Session 4)

<!-- HTML -->
<div id="message">안녕하세요</div>
<button id="button">변경</button>

<!-- JavaScript -->
<script>
  const message = document.querySelector("#message");
  const button = document.querySelector("#button");
  
  button.addEventListener("click", () => {
    message.textContent = "변경됨!";
  });
</script>

After (Session 5)

"use client";
import { useState } from "react";

export default function TextChange() {
  const [message, setMessage] = useState("안녕하세요");

  return (
    <div>
      <div>{message}</div>
      <button onClick={() => setMessage("변경됨!")}>변경</button>
    </div>
  );
}

✨ 작동 화면:

안녕하세요

💡 버튼을 클릭하면 "변경됨!"으로 바뀝니다

📌 핵심

  • querySelectoruseState
  • addEventListeneronClick
  • 자동 렌더링!

🔨 실습 2: 보이기/숨기기

Before (Session 4)

<!-- HTML -->
<div id="box">숨길 수 있는 박스</div>
<button id="button">토글</button>

<!-- JavaScript -->
<script>
  const box = document.querySelector("#box");
  const button = document.querySelector("#button");
  
  button.addEventListener("click", () => {
    const isHidden = box.hasAttribute("hidden");
    if (isHidden) {
      box.removeAttribute("hidden");
    } else {
      box.setAttribute("hidden", "");
    }
  });
</script>

After (Session 5)

"use client";
import { useState } from "react";

export default function Toggle() {
  const [isHidden, setIsHidden] = 
    useState(false);

  return (
    <div>
      <div hidden={isHidden}>숨길 수 있는 박스</div>
      <button onClick={() => setIsHidden(!isHidden)}>
        토글
      </button>
    </div>
  );
}

✨ 작동 화면:

숨길 수 있는 박스

💡 버튼을 클릭하면 박스가 나타났다 사라집니다

📌 핵심

  • setAttribute/removeAttributehidden={isHidden}
  • !isHidden → 토글

🔨 실습 3: 카운터

Before (Session 4)

<!-- HTML -->
<div id="display">0</div>
<button id="decrease">-</button>
<button id="reset">0</button>
<button id="increase">+</button>

<!-- JavaScript -->
<script>
  let count = 0;
  const display = document.querySelector("#display");

  document.querySelector("#increase").addEventListener("click", () => {
    count++;
    display.textContent = count;
  });

  document.querySelector("#decrease").addEventListener("click", () => {
    count--;
    display.textContent = count;
  });

  document.querySelector("#reset").addEventListener("click", () => {
    count = 0;
    display.textContent = count;
  });
</script>

After (Session 5)

"use client";
import { useState } from "react";

export default function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <div>{count}</div>
      <button onClick={() => setCount(count - 1)}>-</button>
      <button onClick={() => setCount(0)}>0</button>
      <button onClick={() => setCount(count + 1)}>+</button>
    </div>
  );
}

✨ 작동 화면:

0

💡 버튼을 클릭하면 숫자가 증가/감소/초기화됩니다

📌 핵심

  • let count + display.textContentuseState(0)
  • 상태 변경 시 자동 렌더링

💡 핵심 정리

Session 4 (순수 DOM) Session 5 (React)
querySelector useState
addEventListener onClick
textContent {변수}
classList.toggle 조건부 렌더링
수동 렌더링 자동 렌더링