Ch.11 React 입문 — 컴포넌트 사고방식
JSX와 첫 컴포넌트
HTML처럼 생겼는데 JavaScript다?
React에서 UI를 표현하는 특별한 문법이 있습니다. HTML과 닮았지만 JavaScript의 힘을 가진 JSX!
HTML 같은데 왜 JavaScript 안에 쓸까?
JSX — JavaScript 안에서 HTML 구조를 직관적으로 작성하는 React의 핵심 문법입니다.
핵심 내용
JSX는 JavaScript 안에서 HTML처럼 UI를 작성합니다
JSX 필수 규칙 3가지 1. `class` → className (class는 JS 예약어) 2. 이벤트는 camelCase (onclick → onClick) 3. 모든 태그는 닫아야 함 (<img />, <br />, <input />)
컴포넌트는 JSX를 반환하는 단순한 JavaScript 함수입니다
// 1. 가장 기본적인 컴포넌트
function Greeting() {
return <h1>안녕하세요!</h1>;
}
// 2. 여러 요소를 반환하는 컴포넌트
function ProfileCard() {
const name = "김리액트";
const age = 25;
return (
<div className="profile-card">
<h2>{name}</h2>
<p>{age}세</p>
<p>React를 공부 중입니다!</p>
</div>
);
}
// 3. 화살표 함수 컴포넌트
const Footer = () => {
return (
<footer>
<p>© 2026 My Website</p>
</footer>
);
};컴포넌트 작성 규칙 1. 이름은 반드시 대문자로 시작 (Greeting, Card, Header) 2. JSX를 return 해야 함 3. 여러 줄이면 소괄호 () 로 감싸기 4. 반드시 하나의 루트 요소를 반환
Props는 부모 컴포넌트에서 자식에게 전달하는 데이터입니다
// Props를 받는 컴포넌트
function UserCard({ name, role, isOnline }) {
return (
<div className="user-card">
<h3>{name}</h3>
<p>역할: {role}</p>
<span>{isOnline ? "🟢 온라인" : "⚫ 오프라인"}</span>
</div>
);
}
// Props를 전달하여 사용
function App() {
return (
<div>
<UserCard name="김짓" role="학생" isOnline={true} />
<UserCard name="이리" role="개발자" isOnline={false} />
<UserCard name="박액" role="디자이너" isOnline={true} />
</div>
);
}부모 컴포넌트: <Card title="React" /> 형태로 props 전달
Props 객체: { title: "React" } 형태의 객체로 전달됨
자식 컴포넌트: 구조 분해로 { title } 받아서 사용
작은 컴포넌트를 조합하면 큰 UI가 만들어집니다
// 작은 컴포넌트들
function Avatar({ src, alt }) {
return <img className="avatar" src={src} alt={alt} />;
}
function UserInfo({ name, bio }) {
return (
<div className="user-info">
<h3>{name}</h3>
<p>{bio}</p>
</div>
);
}
function FollowButton({ isFollowing }) {
return (
<button className={isFollowing ? "following" : "follow"}>
{isFollowing ? "팔로잉" : "팔로우"}
</button>
);
}
// 조합하여 ProfileCard 완성
function ProfileCard({ user }) {
return (
<div className="profile-card">
<Avatar src={user.avatar} alt={user.name} />
<UserInfo name={user.name} bio={user.bio} />
<FollowButton isFollowing={user.isFollowing} />
</div>
);
}컴포넌트 트리 개념 App ├── Header │ ├── Logo │ └── Nav ├── ProfileCard │ ├── Avatar │ ├── UserInfo │ └── FollowButton └── Footer → React는 이 트리 구조로 UI를 관리합니다
JSX에서 HTML의 class 속성 대신 사용하는 것은?
React 컴포넌트의 이름은 소문자로 시작해도 된다
부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하는 방법은 ___ 이다
JSX와 컴포넌트 마스터!
핵심 용어
class → className
JSX에서 class는 JavaScript 예약어이므로 className 사용
for → htmlFor
<label>의 for 속성은 htmlFor로 변환
중괄호 {}
JavaScript 표현식을 JSX 안에 넣을 때 사용
하나의 루트 요소
여러 요소를 반환할 때 <div> 또는 <> 로 감싸야 함
정리 노트
JSX와 첫 컴포넌트 정리
JSX 규칙
- 단일 루트
- JSX는 반드시 하나의 루트 요소로 감싸야 함 (<> 가능)
- 중괄호 {}
- JSX 안에서 JavaScript 표현식을 삽입할 때 사용
- className
- HTML의 class 대신 className 사용
컴포넌트와 Props
- function 컴포넌트
- JSX를 return하는 함수 — 이름은 대문자로 시작
- props
- 부모 → 자식으로 데이터를 전달하는 매개변수 객체
- props.children
- 태그 사이에 넣은 내용을 전달받는 특수 prop
컴포넌트 = 재사용 가능한 UI 함수, Props = 그 함수에 전달하는 인자입니다.
시각 자료
핵심 정리
- 1JSX = JavaScript 안에서 HTML처럼 UI를 작성하는 문법
- 2컴포넌트 = JSX를 반환하는 함수, 대문자로 시작
- 3Props = 부모에서 자식으로 데이터를 전달하는 방법
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 레슨 시작