반응형
1장: JSX와 컴포넌트 - React의 첫인상
React 개발의 가장 기본이 되는 두 가지 개념, JSX와 컴포넌트에 대해 배웁니다. UI를 레고 블록처럼 조립 가능한 부품으로 만드는 방법을 이해합니다.
1. 핵심 개념
- 컴포넌트(Component): React는 UI를 "컴포넌트"라는 독립적이고 재사용 가능한 조각으로 나누어 관리합니다. 각 컴포넌트는 자신만의 로직(JavaScript)과 모양(JSX)을 가집니다. 현대 React에서는 JavaScript 함수로 컴포넌트를 만드는 함수형 컴포넌트가 표준입니다.
- JSX (JavaScript XML): JavaScript를 확장한 문법으로, UI가 어떻게 생겨야 하는지 설명하기 위해 사용됩니다. HTML과 매우 비슷해 보이지만 실제로는 JavaScript입니다. 브라우저가 직접 읽을 수 없기 때문에, 빌드 과정에서
React.createElement()와 같은 순수 JavaScript 코드로 변환됩니다.
2. JSX의 주요 규칙
- 하나의 부모 요소로 감싸야 합니다: 컴포넌트는 반드시 하나의 최상위 태그로 시작해야 합니다. 여러 요소를 반환하려면
<div>나<>(Fragment)로 감싸야 합니다. - JavaScript 표현식은
{}안에 작성합니다: 변수나 간단한 계산 결과를 JSX에 포함시킬 수 있습니다. - HTML과 다른 속성 이름:
class대신className을,for대신htmlFor를 사용합니다. 이벤트 핸들러는onclick대신onClick처럼 카멜 케이스(camelCase)를 사용합니다. - 태그는 항상 닫아야 합니다: 내용이 없는 태그라도
<img>가 아닌<img />처럼 항상 닫아주어야 합니다.
3. 예제 코드
예제 1: 기본 컴포넌트 만들기
가장 기본적인 형태의 함수형 컴포넌트입니다.
// src/components/Welcome.js
// 함수 이름은 대문자로 시작하는 것이 규칙입니다.
function Welcome() {
// return 키워드 뒤에 UI를 정의하는 JSX를 작성합니다.
return <h1>Hello, React World!</h1>;
}
// 다른 파일에서 이 컴포넌트를 사용할 수 있도록 export 합니다.
export default Welcome;
예제 2: 여러 컴포넌트 조립하기
작은 컴포넌트들을 조립하여 더 큰 컴포넌트나 페이지를 만듭니다.
// src/App.js
import Welcome from './components/Welcome';
import MyProfile from './components/MyProfile'; // 추가
function App() {
return (
// 여러 요소를 반환하기 위해 <div>로 감쌌습니다.
<div>
<Welcome />
<MyProfile />
</div>
);
}
export default App;
4. 연습 문제
문제 1: Header 컴포넌트 만들기
- 요구사항: 웹사이트의 헤더 부분을 담당하는
Header컴포넌트를 만드세요. - 세부사항:
<h1>태그로 사이트 로고(예: "My Awesome Site")를 표시합니다.<nav>태그 안에<ul>과<li>를 사용하여 "Home", "About", "Contact" 라는 세 개의 메뉴 항목을 만듭니다.
- 도전과제:
App.js에서 이Header컴포넌트를 화면에 렌더링해보세요.
문제 1 정답 예시
// src/components/Header.js
function Header() {
return (
<header>
<h1>My Awesome Site</h1>
<nav>
<ul>
<li>Home</li>
<li>About</li>
<li>Contact</li>
</ul>
</nav>
</header>
);
}
export default Header;
// src/App.js
import Header from './components/Header';
function App() {
return (
<div>
<Header />
{/* 다른 컨텐츠 */}
</div>
);
}
문제 2: Footer 컴포넌트 만들기
- 요구사항: 웹사이트의 푸터 부분을 담당하는
Footer컴포넌트를 만드세요. - 세부사항:
<p>태그를 사용하여 저작권 정보를 표시합니다. (예: "© 2024 My Awesome Site. All rights reserved.")- 소셜 미디어 링크를 담을
div를 만들고, 그 안에 "Facebook", "Twitter", "Instagram" 텍스트를 넣습니다.
- 도전과제:
App.js에서Header컴포넌트 아래에Footer컴포넌트를 렌더링해보세요.
문제 2 정답 예시
// src/components/Footer.js
function Footer() {
return (
<footer>
<p>© 2024 My Awesome Site. All rights reserved.</p>
<div>
<span>Facebook</span> |
<span>Twitter</span> |
<span>Instagram</span>
</div>
</footer>
);
}
export default Footer;
// src/App.js
import Header from './components/Header';
import Footer from './components/Footer';
function App() {
return (
<div>
<Header />
<main>
<p>여기는 메인 컨텐츠입니다.</p>
</main>
<Footer />
</div>
);
}
반응형
'프론트엔드 > 리액트' 카테고리의 다른 글
| [React] 9장: 스타일링 - 컴포넌트에 옷 입히기 (0) | 2025.09.16 |
|---|---|
| [React] 8장: Hooks 심화 - React 능력 끌어올리기 (0) | 2025.09.16 |
| [React] 7장: 폼 다루기 - 사용자의 입력 받기 (0) | 2025.09.16 |
| [React] 6장: 리스트와 Key - 동적인 목록 만들기 (0) | 2025.09.16 |
| [React] 5장: 조건부 렌더링 - 상황에 맞는 UI 보여주기 (0) | 2025.09.16 |
| [React] 4장: 이벤트 핸들링 - 사용자와의 상호작용 (0) | 2025.09.16 |
| [React] 3장: State와 생명주기 - 살아 움직이는 컴포넌트 (0) | 2025.09.16 |
| [React] 2장: Props - 컴포넌트에 생명 불어넣기 (1) | 2025.09.16 |