티스토리 뷰
문제상황
classnames 라이브러리를 활용하여 동적인 클래스 명을 부여해서 컴포넌트 마다 다른 폰트 컬러를 적용하려고 하니 css먹지 않았다. 이유를 알 수 없어서 오타가 난건지 확인을 여러번 했고 디버깅도 했는데 원인을 찾을 수가 없었다.(당연하다 CSS는 디버깅이 어렵다.) 컴파일 순서때문인지 혹은 값을 내려주는 컴포넌트에서 변수명을 틀린 것인지 전부 다 확인해봤으나 문제를 찾을 수가 없었다. 🤯
원인
지금은 해결해서 알게된 사실이지만 개발자 도구에서 내가 classNames함수(classnames 라이브러리 제공 함수)를 통해 부여한 동적인 클래스 값이 해싱되지 않았다면 지금 해당 컴포넌트의 모듈 scss가 아니라 단순 css 클래스명이 부여된 것이라 CSS가 인식이 안된 것 같다.
문제였던 코드
// listItem.jsx
export default function ListItem({
category,
score,
icon,
bgColor,
fontColor,
}) {
const backgroundColor = bgColor || "#fff";
const categoryClassName = classNames(styles["item-topic"], fontColor);
// fontColor 는 string 값이다. e.g.) "red"
return (
<div className={styles["item-container"]} style={{ backgroundColor }}>
<div className={categoryClassName}>
<img src={icon} alt={category} />
{category}
</div>
<div className={styles["item-score"]}>
<span>{score}</span> / 100
</div>
</div>
);
}
해결
해결 코드
import React from "react";
import styles from "./ListItem.module.scss";
import classNames from "classnames";
export default function ListItem({
category,
score,
icon,
bgColor,
fontColor,
}) {
const backgroundColor = bgColor || "#fff";
const categoryClassName = classNames(styles["item-topic"], {
[styles.red]: fontColor === "red",
[styles.orange]: fontColor === "orange",
[styles.green]: fontColor === "green",
[styles.blue]: fontColor === "blue",
});
return (
<div className={styles["item-container"]} style={{ backgroundColor }}>
<div className={categoryClassName}>
<img src={icon} alt={category} />
{category}
</div>
<div className={styles["item-score"]}>
<span>{score}</span> / 100
</div>
</div>
);
}
결론적으로 classnames 라이브러리 사용법이 미숙했던 것과 module SCSS 의 특성에 대해서 제대로 파악하지 못했던 것이 문제였던 거 같다. 그냥 함수에 값만 넘겨주면 알아서 모듈 scss의 클래스명을 인식하는 줄 알았는데 그게 아니라 내가 불러온 scss 모듈 객체를 넘겨줘야 했다.
'Frontend > CSS, HTML' 카테고리의 다른 글
[CSS] 가로 스크롤 이슈 해결하기 (0) | 2023.04.26 |
---|---|
[CSS] responsive web(HTML, CSS) tips (0) | 2023.04.25 |
[CSS] SCSS란 무엇인가? (0) | 2023.04.08 |
[CSS] CSS의 흐름 (1) | 2023.03.13 |
[CSS] 반응형 웹(미디어 쿼리, 중단점), 잘 사용되는 CSS속성들 (0) | 2023.02.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 항해99프론트
- text input pattern
- 항해99프론트후기
- grid flex
- 타입스크립트 DT
- 프리렌더링확인법
- getStaticPaths
- getServerSideProps
- 원티드 프리온보딩 FE 챌린지
- float 레이아웃
- 원티드 FE 프리온보딩 챌린지
- Prittier
- reactAPI
- fs모듈 넥스트
- is()
- tilde caret
- nvm경로 오류
- 항해99추천비추천
- 타입스크립트 장점
- D 플래그
- 틸드와 캐럿
- 원티드 3월 프론트엔드 챌린지
- 부트캠프항해
- 형제 요소 선택자
- aspect-ratio
- ~ ^
- nvm 설치순서
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- 프리온보딩 프론트엔드 챌린지 3월
- && 셸 명령어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함