2025 / 03 / 13
오늘 수업 시간에는 React에서 스타일을 적용하는 방법을 배웠습니다.
그리고 저번 시간에 이어 컴포넌트를 만드는 방법을 다시 복습하였습니다.
하루 종일 CSS 적용 방법만 배웠는데, 나름 괜찮았습니다.
CSS 모듈화
- CSS 파일을 컴포넌트 단위로 독립적으로 관리하는 방식입니다.
- 작성한 CSS를 해당 컴포넌트에서만 사용할 수 있게 만드는 방식입니다.
- CSS 클래스 이름이 전역적으로 공유되지 않고, 컴포넌트 단위로 스코프가 제한됩니다.
- CSS 모듈을 사용하면 클래스 이름 충돌을 방지할 수 있습니다.
1) 스타일 충돌 방지
- CSS에서는 클래스 이름이 전역적으로 적용되기 때문에, 다른 컴포넌트에서 같은 이름을 가진 클래스가 있으면 스타일이 겹칠 수 있습니다.
- 컴포넌트의 스타일이 독립적으로 관리되어 충돌을 방지할 수 있습니다.
CSS 코드
/* Button.module.css */ .button { background-color: blue; }
JSX 파일
// Button.js import React from 'react'; import styles from './Button.module.css'; function Button() { return <button className={styles.button}>Click me</button>; } export default Button;
- 스타일이 컴포넌트에 한정되므로, 컴포넌트가 독립적으로 재사용 가능합니다.
CSS 코드
// Card.module.css .card { border: 1px solid #ccc; padding: 20px; border-radius: 8px; }
JSX 파일
// Card.js import React from 'react'; import styles from './Card.module.css'; function Card({ children }) { return <div className={styles.card}>{children}</div>; } export default Card;
- 각 클래스나 아이디의 이름을 유니크한 값으로 변경하여 충돌을 방지합니다.
- 다른 컴포넌트에서 동일한 클래스 이름을 사용해도 충돌하지 않습니다.
- React는 클래스 이름을 자동으로 해싱하여 고유하게 만들어줍니다.
- 글로벌 네임스페이스에 클래스 이름이 겹칠 일이 없습니다.
1. 파일 확장자
- CSS 모듈을 사용하려면, 파일 확장자를 .module.css로 설정합니다.
2. CSS 모듈 가져오기
- CSS 모듈을 import 할 때는 JavaScript 객체처럼 사용됩니다.
App.js
import React from 'react'; import styles from './App.module.css'; function App() { return <div className={styles.container}>Hello World!</div>; } export default App;
App.module.css
.container { background-color: lightblue; padding: 20px; }
- 클래스 모듈화를 사용할 때 주의할점입니다.
- CSS 모듈은 자동으로 클래스 이름을 해싱하여 고유하게 만듭니다.
- CSS 파일을 임포트할 때마다 파일 내용이 다르게 적용될 수 있습니다.
- 동일한 이름을 가진 클래스가 여러 컴포넌트에서 사용되더라도 충돌하지 않습니다.
- 중복된 클래스 이름을 작성하려면, 각 파일에서 클래스를 관리하는 방식에 주의가 필요합니다.
- style={{ }} 객체로 전달하거나 inline 스타일을 사용하는 경우가 많습니다.
- 이런 CSS 모듈을 사용하면 스타일링이 가독성이 떨어지거나 유지보수가 어려울 수 있습니다.
// 불편한 스타일링 방식 function Button({ bgColor }) { return <button style={{ backgroundColor: bgColor }}>클릭</button>; }// CSS 모듈을 사용할 때 import styles from './Button.module.css'; function Button() { return <button className={styles.button}>클릭</button>; }
React 스타일 모듈화는 다음과 같은 장점과 특징을 가지고 있습니다.
1. 스타일 충돌 방지
2. 재사용성 증가
3. 유지보수 용이
46일차 후기
- CSS를 객체 형태로 그냥 넘겨주는 것보다 모듈화를 진행해서 접근하는 방식이 확실히 이해하기도 편하고 딱 봤을 때 헷갈리는 부분이 없는 것 같습니다.
- 생각보다 별로 내용이 없는 것 같은데 오늘 7시간 동안 배웠다는게 믿기지 않습니다..
- CSS를 모듈화해서 사용할 수 있다는 점이 흥미로웠고, 살짝 귀찮은 부분이 아닌가.. 라는 생각을 했었는데 사용해보니까 코드가 간결해지고 부분별로 나눠져 있어서 보기에 편했습니다. o͡͡͡͡͡͡͡͡͡͡͡͡͡͡╮(。ᐤヮᐤ。)╭o͡͡͡͡͡͡͡͡͡͡͡͡͡͡