React JS
클래스명 충돌 css-module로 해결하기
수연 (Suyeon)
2022. 12. 12. 23:26
반응형
React로 프로젝트를 만들던 도중에 style을 준 적이 없는데 이상하게 화면이 보인 적이 있었습니다.
찾아보니 컴포넌트끼리 같은 클래스명을 사용하면 충돌이 일어난다고 하네요..
그래서 이를 해결할 방법을 찾아보니 css-module을 사용하면 충돌을 막을 수 있다고 합니다!!
css-module 사용하기
/* 주의!! */
/* React에서 css-module을 사용할 땐, 클래스명을 abc-efg 하면 안되고 abcEfg 로 지어야 오류가 안 생긴다. */
.itemsList {
background-color: #E67E22;
margin: 0 auto;
}
.item {
color: #ffffff;
font-size: 18px;
}
import style from './style.css';
function App() {
return (
<ul className={`${style.itemsList`}>
<li className={`${style.item}`}>홈</li>
<li className={`${style.item}`}>레시피</li>
<li className={`${style.item}`}>나눔/신청</li>
<li className={`${style.item}`}>채팅</li>
<li className={`${style.item}`}>마이페이지</li>
</ul>
);
}
css-module 작성하는 법
- {`${CSS명.클래스명}`}
css-module 단점
- 코드를 작성하기 번거롭고, 가독성이 좋지 못합니다.
이를 해결하기 위해 classnames 패키지를 사용하면 됩니다!
패키지를 사용하기 위해 아래와 같이 터미널에 명령을 입력해주세요.
npm i -S classnames
import style from './style.css';
import cn from 'classnames';
function App() {
return (
<ul className={cn(style.itemList)}>
<li className={cn(style.item)}>홈</li>
<li className={cn(style.item)}>레시피</li>
<li className={cn(style.item)}>나눔/신청</li>
<li className={cn(style.item)}>채팅</li>
<li className={cn(style.item)}>마이페이지</li>
</ul>
);
}
classnames로 css-module 작성하는 법
- {classnames명(CSS명.클래스명)}
clssnames 장점
- classnames 패키지 덕분에 코드 작성하기 간단해졌고 이해하기 더 쉬워졌습니다.
앞으로 컴포넌트를 여러 개 만들 땐 꼭 css-module을 사용해야겠습니다.
728x90