자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[Nextjs] 3장 React 기본기

728x90

✅ 1. 컴포넌트 (Component)

컴포넌트는 React 앱의 기본 단위로 함수형 컴포넌트를 주로 사용합니다.

function Welcome() {
  return <h1>Hello</h1>;
}

export default Welcome;

✅ 2. Props (속성)

Props는 컴포넌트에 전달하는 값으로, 부모 -> 자식순으로 데이터를 전달합니다.

// 부모
<Hello name="Jammy" age={25} />


// 자식
interface HelloProps {
  name: string;
  age: number;
}

// 자식
const Hello = ({ name, age }: HelloProps) => {
  return (
    <h1>
      Hello, {name}, {age}
    </h1>
  );
};

export default Hello;

✅ 3. State (상태)

state는 컴포넌트 내부에서 관리되는 동적인 값으로, useState 훅을 사용해 선언합니다.

import { useState } from "react";

function Counter() {
  const [counter, setCounter] = useState(0);

  return (
    <div>
      <h1>카운터: {counter} </h1>
      <button onClick={() => setCounter(counter + 1)}>클릭</button>
    </div>
  );
}

export default Counter;

✅ 4. Hooks 

  • useState -> 컴포넌트 상태 관리
  • useEffect -> 렌더링 후 실행되는 사이드 이벤트(데이터 가져오기, 구독 등)
import React, { useEffect, useState } from "react";

const Hooks = () => {
  const [time, setTime] = useState(0);

  useEffect(() => {
    const id = setInterval(() => setTime((t) => t + 1), 1000);
    return () => clearInterval(id); // cleanup
  }, []);

  return (
    <div>
      <p>{time} 초 경과</p>
    </div>
  );
};

export default Hooks;
  • useRef - DOM 요소나 값을 기억
import React, { useRef } from "react";

function RefUse() {
  const inputRef = useRef<HTMLInputElement>(null);

  const focus = () => inputRef.current?.focus();

  return (
    <>
      <input ref={inputRef} />
      <button onClick={focus}>포커스 추가</button>
    </>
  );
}

export default RefUse;
  • useContext - 전역 상태 전달(Props drilling을 피할 때)
import { createContext, useContext } from "react";
import Hooks from "@/components/ReactDefault/Hooks";
import Hello from "@/components/ReactDefault/Poprs";
import RefUse from "@/components/ReactDefault/useRef";
import Counter from "@/components/ReactDefault/useState";
import Welcome from "@/components/ReactDefault/Welcome";
import type { NextPage } from "next";

const ThemeContext = createContext("light");

function Child() {
  const theme = useContext(ThemeContext);
  return <p>현재 테마: {theme}</p>;
}

const Home: NextPage = () => {
  return (
    <>
      <ThemeContext.Provider value="light">
        <Welcome />
        <hr />
        <Hello name="Jammy" age={25} />
        <hr />
        <Counter />
        <hr />
        <Hooks />
        <hr />
        <RefUse />
        <hr />
        <Child />
      </ThemeContext.Provider>
    </>
  );
};

export default Home;

5. 이벤트 처리

React 이벤트는 camelCase로 작성합니다.

function EventButton() {
  const handleClick = () => alert("Button Clicked!");

  return <button onClick={handleClick}>클릭</button>;
}

export default EventButton;

✅ 6. 리스트 렌더링

map()으로 반복 렌더링을 수행하며 key 속성을 필수로 넣어주어야 합니다.

const fruits = ["사과", "바나나", "포토", "딸기"];

function FruitList() {
  return (
    <ul>
      {fruits.map((f, i) => (
        <li key={i}>{f}</li>
      ))}
    </ul>
  );
}

export default FruitList;

✅ 7. 조건부 렌더링

조건부 렌더링은 삼항 연산자, &&연산자를 활용하여 렌더링합니다.

function Login({ isLoggedIn }: { isLoggedIn: boolean }) {
  return (
    <div>{isLoggedIn ? <p>환영합니다!</p> : <p>로그인이 필요합니다</p>}</div>
  );
}

export default Login;

 

 

GitHub - Koras02/nextjs-bloging: https://thinky.tistory.com/category/Front-End/NextJs

https://thinky.tistory.com/category/Front-End/NextJs - Koras02/nextjs-bloging

github.com

 

728x90
LIST

'Front-End > NextJs' 카테고리의 다른 글

[Nextjs] 4장 폴더 구조 이해하기  (1) 2025.09.01
[Nextjs] 2장 Typescript 기본 문법  (1) 2025.08.14
[Nextjs] 1장 Next.js란?  (1) 2025.08.12