Front-End/React

React 각 컴포넌트 별 CSS 적용

코드깎는머슴 2024. 8. 31. 11:36
728x90
반응형

React 각 컴포넌트 별 CSS 적용

 

 

 

아래 코드를 보면서 문제 상황을 보자.

App.js

function App() {

    return (
        <div className="App">
            <div className="box">App</div>
            <Temp></Temp>
        </div>
    );
}

 

Temp.js

function Temp() {
    return (
      <div className="box">Temp</div>
    );
}

 

 

App.css

.box{
  width: 100px;
  height: 100px;
  background: skyblue;
}

 

아래는 화면 미리보기

 

App.css에 적은 코드지만 Temp.js에서 JSX로 작성한 코드에도 적용이 된다.

사실 이건 기존 HTML, CSS, Js를 사용해봤으면 당연한 것이다.

하지만 이렇게 되면, CSS가 많아졌을 때 보기가 너무 힘들 것이다.

 

아래와 같이 수정해보자.

 

App.module.css 생성

.box{
    width: 100px;
    height: 100px;
    background: skyblue;
}

 

App.js

import styles from "./App.module.css";
import Temp from "./Temp";

function App() {

    return (
        <div className="App">
            <div className={styles.box}>App</div>
            <Temp></Temp>
        </div>
    );
}

 

Temp.js

import styles from "./Temp.module.css"

function Temp() {
    return (
        <div className={styles.box}>Temp</div>
    );
}

 

Temp.module.css

.box{
    width: 100px;
    height: 100px;
    background: blue;
}

 

화면 미리보기

이렇게 하면 색이 다르게 보인다.

 

js 별로 위에 import 문이 있는 것을 보면 css 파일을 객체로 가져와서,

태그의 className 값으로 넣어주고 있다.

개발자 도구로 확인하면 각 컴포넌트 이름에 맞게 만들어져서 들어가있다.

 

이렇게 하면 css가 많아졌을 때도 클래스명이 같다는 이유로 css가 중복 적용 되거나,

원치않게 작동하는 경우를 방지할 수도 있으며

css를 컴포넌트 별로 관리할 수 있기 때문에 유지보수성이 뛰어나다.

여러 css에 걸쳐서 네이밍이 겹쳐도 상관없다는 점이 제일 좋은 것 같다.

안겹치게 잘 이름 짓는건 너무 어려웡...

 

728x90
반응형