

css modules를 쓰고 있는데 css를 쓸 때 객체형식으로 써야해서 불편하다!
css modules를 쓰지 않는다고 해도, 상태에 따라 클래스명을 부여해야할 경우 너무 지저분하다!!
npm install classnames --save
설치만 하면 끝일줄 알았는데...

TS는 따로 설치해야 할 것이 있었음..
npm install --save @types/classnames
TS 쓰는 분들은 두번째꺼도 복붙 고고! 🙋🏻♀️
혹시나 하는 마음에.. 아래의 명령어를 복붙 후 1번 명령어로 설치한 classNames를 지웠더니 역시나 에러가..!
TS 쓰는 분들은 명령어 두 개 입력!
아닌 분들은 첫번째 것만 복붙 고!!
import css from "./SidePannels.module.scss";
// 중략
<div
onClick={() => setIsOpen(!isOpen)}
className={`${css[`path${path.length}`]}
${path.length === 3 && css.blueBg}
`}>
// 중략
CSS MODULES는 위의 코드 예시처럼 css를 객체형으로 불러와서
dot notation혹은bracket notation으로 써야 한다.
template literal을 덕지덕지 쓰다보면 자꾸 Syntax error가 생기는데
위의 복잡한 코드를 요렇게 뙇!
import classNames from "classnames/bind";
import css from "./SidePannels.module.scss";
const cn = classNames.bind(css);
// 중략
<div
onClick={() => setIsOpen(!isOpen)}
className={cn(`path${path.length}`,path.length === 3 && `blueBg`
)}>
// 중략
css.을 계속 붙여 줘야 한다. 꼭 bind 해서 쓸 것!더 복잡한 코드를 비교해보자 🤮
<img
className={`${css.pannelTriangle}
${isOpen && path.length !== 3? css.pannelOpen: css.pannelClose}
${path.length === 3 && css[`pannelArrow`]}
${!title && css[`imgNotFound`]} } />
보기만 해도 template literal에 삼항연산자에 뭔가 덕지덕지 더러워 보인다.
한 눈에 보기 쉽지 않다!
<img
className={cn(
"pannelTriangle",
isOpen && path.length !== 3 ? "pannelOpen" : "pannelClose",
path.length === 3 && "pannelArrow",
!title && "imgNotFound" )} />
길이만 따지고 보면 별 차이 없어 보이지만,
template literal을 안 쓰니까 훨씬 가독성이 좋아졌다!
이미지로도 비교해보자면...



ㅋㅋㅋ 글이 너무 재밌고 유익합니다!