React는 프론트엔드 개발에서 가장 널리 사용되는 라이브러리 중 하나이다.
이번 포스팅에서는 React를 처음 접하는 사람들을 위해 디렉토리 구조와 주요 개념들을 알아보겠다.
React 프로젝트의 디렉토리는 다음과 같이 구성할 수 있다:
src/
├── components/
│ ├── Header/
│ │ ├── Header.js
│ │ └── Header.css
│ └── UserCard/
│ ├── UserCard.js
│ └── UserCard.css
├── pages/
│ ├── Home.js
│ └── About.js
├── styles/
│ ├── global.css
│ ├── Home.css
│ └── About.css
public/
assets/
index.html
에서 직접 사용하는 파일들 (예: 파비콘).pages
내부에서 정의하기에는 코드가 긴 컴포넌트들로, 컴포넌트 폴더 안에 .js
와 .css
파일을 포함한다..css
파일들.컴포넌트
: React에서 UI를 구성하는 독립적인 단위이다.
훅
: 함수형 컴포넌트에서 상태 관리와 생명주기 메서드와 같은 React의 기능을 사용할 수 있게 해주는 기능이다.
useState
, useEffect
등이 있으며, 이를 통해 상태 관리와 사이드 이펙트를 처리할 수 있다.State
: 컴포넌트의 상태를 나타내는 객체
React에서 API를 호출할 때는 Fetch API나 Axios를 주로 사용한다.
다음은 두 방법의 사용 예시이다:
Fetch 사용 예시
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
// 데이터 처리 로직
})
.catch(error => {
// 에러 처리 로직
});
Axios 사용 예시
import axios from 'axios';
axios.get('https://api.example.com/data')
.then(response => {
// 데이터 처리 로직
})
.catch(error => {
// 에러 처리 로직
});
React 컴포넌트는 하나의 태그를 반환해야 한다. 만약 여러 개의 요소를 반환하려면 부모 요소로 감싸주어야 한다.
부모 요소로 <div>
를 사용할 수도 있고, 불필요한 DOM 노드를 줄이기 위해 React Fragment를 사용할 수도 있다.
예시:
function App() {
return (
<>
<Header />
<MainContent />
<Footer />
</>
);
}
CSS Module은 클래스 이름을 고유화하여 전역 네임스페이스 충돌을 방지한다. CSS 파일명을 Component.module.css
로 지정하고 컴포넌트에서 import
하여 사용하면 된다. 이를 통해 클래스 이름이 해시값으로 변환되며, 스타일 충돌을 방지할 수 있다.
CSS 파일 예시
/* Button.module.css */
.primaryButton {
background-color: blue;
}
JS 파일 예시
import styles from './Button.module.css';
function Button() {
return <button className={styles.primaryButton}>Click Me</button>;
}
export default Button;