본문 바로가기
React

[React] Props 부모 -> 자식

by wildOjisan 2025. 5. 13.

my_react_app.zip
0.18MB

 

 

 

왜 자식 컴포넌트를 따로 만들고, 부모에서 불러서 사용하는 걸까?

 

나누지 않았을 때                                                                       나눴을 때

코드가 점점 길어짐 재사용하기 쉬움
똑같은 걸 반복해야 함 필요한 부분만 고치면 됨
이해하기 어려움 역할이 나뉘어 더 쉬움

 

 

  • 자식 컴포넌트 = 반찬통
    • 필요한 반찬(기능)을 따로 만들고
  • 부모 컴포넌트 = 도시락
    • 그걸 모아서 도시락(화면)을 구성하는 거예요

"코드를 반찬처럼 쪼개서 저장통에 담아두면,
나중에 **다른 도시락(화면)**에서도 쉽게 꺼내쓸 수 있어요.
코드를 정리하기도 쉽고, 재사용도 편하고, 보기에도 좋아요!"

 

 

src/
├── pages/
│   └── PropsPracticePage.tsx   ← 연습용 페이지
├── components/props_practice_page/
│   └── StudentCard.tsx         ← 자식 컴포넌트

 

 

// src/components/props_practice_page/StudentCard.tsx
import React from "react";

// 🧒 자식 컴포넌트가 받을 값의 이름(name)과 그 타입(string)을 정해요
interface StudentCardProps {
  name: string; // name은 문자열(string)이어야 해요
}

// 👇 StudentCard라는 자식 컴포넌트를 만들어요
// (부모로부터 name이라는 값을 받아서 사용해요)
const StudentCard: React.FC<StudentCardProps> = ({ name }) => {
  return (
    <div style={{ border: "1px solid black", padding: "1rem", marginTop: "1rem" }}>
      <h3>📛 학생 카드</h3>
      {/* 받은 name 값을 화면에 보여줘요 */}
      <p>이름: {name}</p>
    </div>
  );
};

// 이 컴포넌트를 다른 파일에서도 쓸 수 있도록 내보내요
export default StudentCard;

 

부모가 주는 것                                                                                    자식이 받는 방법                  자식이 사용하는 방법

<StudentCard name="홍길동" /> props.name 이름: {name}

 

 

// src/pages/PropsPracticePage.tsx
import React, { useState } from "react";
import StudentCard from "../components/props_practice_page/StudentCard";

// 👨‍🏫 부모 컴포넌트
const PropsPracticePage: React.FC = () => {
  // 🧠 학생 이름을 저장할 공간(상태)을 만들어요
  const [studentName, setStudentName] = useState("");

  // ✏️ 사용자가 input에 글자를 입력하면 실행되는 함수
  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
    // 입력한 값을 상태에 저장해요
    setStudentName(e.target.value);
  };

  return (
    <div style={{ padding: "2rem" }}>
      <h2>🧪 Props 연습 페이지</h2>
      <p>학생의 이름을 입력해보세요:</p>

      {/* 사용자가 이름을 입력할 수 있는 입력창 */}
      <input
        type="text"
        placeholder="이름을 입력하세요"
        value={studentName} // 상태 값이 input에 반영돼요
        onChange={handleChange} // 글자가 바뀔 때마다 handleChange가 실행돼요
        style={{ padding: "0.5rem", marginBottom: "1rem" }}
      />

      {/* StudentCard 컴포넌트에 이름을 전달해요 */}
      <StudentCard name={studentName} />
    </div>
  );
};

// 이 페이지를 다른 곳에서 쓸 수 있게 내보내요
export default PropsPracticePage;

 

 

라우팅 추가하기 

App.tsx 또는 routes.tsx 파일에서 이 페이지로 이동할 수 있게 추가하세요:

<Route path="/props_practice" element={<PropsPracticePage />} />

 

 

📊 그림으로 쉽게 이해

┌────────────────────────────┐
│      PropsPracticePage     │ ← 부모 컴포넌트
│  ┌──────────────────────┐  │
│  │ input                 │  │ ← 이름 입력
│  │                      ↓  │
│  │ <StudentCard name="홍길동" /> │
│  └──────────────────────┘  │
└────────────┬───────────────┘
             │
             ▼
  ┌───────────────────────────┐
  │       StudentCard         │ ← 자식 컴포넌트
  │   이름: 홍길동             │
  └───────────────────────────┘

 

개념                         설명

props 부모가 자식에게 값(데이터)을 주는 통로
interface 자식이 받을 값의 이름과 타입을 미리 약속하는 문서
useState 입력값 같은 데이터를 실시간으로 저장하고 반영하는 React 함수

 

'React' 카테고리의 다른 글

[React] 주요 기능들 + 용어  (0) 2025.06.03
[React] tailwind css 설치  (0) 2025.06.02
[React] To do list (할일목록)  (1) 2025.05.12
[React] 전역 상태 zustand  (0) 2025.05.10
[React] 페이지 이동 기능 넣기  (0) 2025.05.10