
이번 주차는 1주차에서 배운 functional 컴포넌트를 기반으로, 컴포넌트가 데이터를 주고받는 방법에 초점을 맞춥니다. props는 React의 핵심 개념으로, 컴포넌트를 모듈화하고 동적 UI를 만드는 데 필수적입니다. 30~40분 세션에 맞춰 간단한 예시 위주로 진행하겠습니다.
Vite.js로 React 프로젝트가 이미 생성되어 있다고 가정합니다.
| 항목 | 버전/설명 |
|---|---|
| Node.js | v20.9.0 이상 |
| Editor | VS Code 추천 |
| 프로젝트 | Vite + React 프로젝트 (src/App.jsx, src/main.jsx 등 존재) |
기존 프로젝트의 src/App.jsx와 src/main.jsx를 사용합니다.
Props(Properties의 약자)는 부모 컴포넌트에서 자식 컴포넌트로 전달되는 읽기 전용 데이터입니다. 이는 컴포넌트를 재사용할 때 유용합니다. 예를 들어, 같은 버튼 컴포넌트를 사용하되 텍스트를 다르게 전달할 수 있어요.
새 파일 Greeting.jsx를 src 폴더에 생성하세요. 이는 props를 받는 자식 컴포넌트입니다.
// src/Greeting.jsx
function Greeting(props) {
return <h1>Hello, {props.name}!</h1>;
}
export default Greeting;
props 객체를 매개변수로 받아, props.name처럼 접근합니다. JSX 안에서 {}로 동적으로 렌더링합니다.src/App.jsx를 부모 컴포넌트로 사용해 Greeting을 불러오고 props를 전달합니다.
// src/App.jsx
import Greeting from './Greeting';
function App() {
return (
<div>
<Greeting name="React Learner" />
<Greeting name="Grok" />
</div>
);
}
export default App;
<Greeting name="React Learner" />처럼 HTML 속성(attribute) 형태로 props를 전달합니다. 여러 props를 전달할 수 있어요 (e.g., age={25}).Props로 객체를 전달해 보세요. Greeting.jsx를 수정합니다.
// src/Greeting.jsx
function Greeting(props) {
return (
<div>
<h1>Hello, {props.user.name}!</h1>
<p>Age: {props.user.age}</p>
</div>
);
}
export default Greeting;
App.jsx 수정:
// src/App.jsx
import Greeting from './Greeting';
function App() {
const user1 = { name: 'Alice', age: 30 };
const user2 = { name: 'Bob', age: 25 };
return (
<div>
<Greeting user={user1} />
<Greeting user={user2} />
</div>
);
}
export default App;
user={user1}처럼 객체를 전달하고, props.user.name으로 접근합니다. 이는 복잡한 데이터를 쉽게 전달합니다.1주차 회원가입 폼에 props 적용해 보세요.
예시 코드:
// src/FormInput.jsx
function FormInput(props) {
return (
<div>
<label>{props.label}</label>
<input type="text" placeholder={props.placeholder} />
</div>
);
}
export default FormInput;
// src/App.jsx
import FormInput from './FormInput';
function App() {
return (
<form>
<FormInput label="Name" placeholder="Enter your name" />
<FormInput label="Email" placeholder="Enter your email" />
</form>
);
}
export default App;
spread 문법으로도 컴포넌트 만들어보기.다음 주차: useState로 상태 관리 배우기. 질문 있으시면 언제든! 🚀