-
module.css 모듈 css의 중요성React 2021. 8. 5. 14:07
오늘 차장님께 react에서 module.css의 중요성을 들었다.
책의 내용과 인터넷 검색 결과를 취합하여 나만의 것으로 만들어보고자 한다.
-모듈 css란?
: css를 불러와서 사용할 때 클래스 이름을 [파일이름]_클래스명_해시값 형태로 자동으로 만들어준다.
앞뒤로 파일명과 해시값이 붙어 자동으로 고유해지기 때문에, 흔한 이름으로 클래스명을 지정해도 괜찮다.
(이 스타일을 직접 불러온 컴포넌트 내부에서만 작동하기 때문)
<div className={ styles.wrapper }>
* 모듈로 적용한 스타일 명을 여러개 쓰고 싶다면?
<div className={ `${styles.wrapper} ${styles.wrapper}` }>
또는
<div className={ [styles.wrapper , styles.wrapper].join(' ') } >
(이건 처음알았다. 짱 신기하다)
* 모듈 css 안에서, 만약 특정 클래스명이 모든 페이지, 즉 전역적으로 사용되어야 한다면?
:global .example { }
이렇게 글로벌 css임을 명시한다.
앞에 global을 붙여주고 작성하면 된다.
JSX에서 이 클래스명을 넣을때는 styles.클래스명 모듈 css 클래스명을 넣듯이 넣고,
이렇게 넣으면 웹페이지에서는 모듈이 붙지않고 그냥 문자열로 들어간다
* 만약 일반 css 파일에서 모듈 클래스명을 사용하고 싶다면?
:local .example { }
이렇게 넣으면 모듈 css 처럼 쓸 수 있다
(이건 아직 잘 모르겠다. 해봐야겠다)
- class 라이브러리란?
css 클래스를 조건부로 설정 시 굉장히 좋은 라이브러리라고 한다.
module 사용 시에 이 라이브러리를 사용하면 굉장히 편리한 듯.
$ yarn add classnames
우선 터미널에서 이렇게 설치를 하고
(나는 npm을 써서 npm으로 설치했다)
import classNames from 'classnames';
라이브러리를 임포트한 뒤에
const MyComponent = ( { highlighted, theme } ) => (
<div className={ classNames( 'MyComponent' , { highlighted } , theme ) } > Hello </div>
);
myComponent를 선언하고, 파라미터로 hightlighted와 theme를 사용.
classNames를 사용해서
이 엘리먼트의 클래스에 highlighted가 true라면 highlighted 이 클래스가 적용될 것이고,
false면 적용되지 않는다.
+ 전달받는 문자열은 내용 그대로 클래스에 적용된다
class라이브러리를 사용한 이 코드는, 사용하지 않은 아래와 같다
const MyComponent = ( { highlighted, theme } ) => (
<div className={ `MyComponent ${ theme } ${ highlighted ? 'highlighted' : ' ' }` } > Hello </div>
);
(사실 아직은 잘 모르겠다. 난 이게 더 가독성이 좋은 것 같은데... classNames 문법은 이해가 잘 안간다)
내가 직접 더 많이 해봐야할듯.
'React' 카테고리의 다른 글
Hooks와 Class 컴포넌트, react hook을 쓰는 이유 (0) 2021.10.06 API를 이용해 서버에서 데이터를 가져와보자 (0) 2021.09.29 react project를 시작하기 (0) 2021.08.12