classnames는 CSS 클래스를 조건부로 설정할 때 유용한 라이브러리이다.
yarn 혹은 apt-get으로
yarn add classnames
해준다.
간략하게 설명하자면 가독성이 좋게 여러가지 클래스를 넣어줄수도 있고,
문자열, 키밸류쌍으로된 객체, 배열등을 classNames()의 소괄호 안에 넣어서 사용할 수 있다.
객체안에 밸류값으로 true나 false값을 갖는 boolean을 줄 수 있기 때문에
리액트에서는 부모로부터 전달받은 props의 상태값에 따라 스타일의 변화를 줄때 사용하면 좋다.
const MyComponent = ({ highlighted, theme }) => {
<div className={`MyComponent ${theme} ${highlighted ? 'highlighted' : ''}`}>
Hello
</div>
};
예시 코드는 classnames를 사용하지 않고 순수 자바스크립트와 리액트만 가지고 조건부 클래스이름을 설정해준 예시이다.
리액트에서는 기본적으로 class="" 이런식이 아니라 className={} 형태를 사용한다.
이떄 이 안에 변수를 담으면서 띄어쓰기를 보이는대로 지켜주기 위해 백틱을 사용한 ES6 템플릿 문자열을 사용했다.
또 이 안에서 조건부 클래스명을 주기위해 삼항연사자까지 사용하였다.
이 코드는 classNames 라이브러리를 쓰게 되면 이렇게 변한다.
const MyComponent = ({ highlighted, theme }) => (
<div className={classNames('MyComponent', { highlighted }, theme)}>Hello</div>
)
위의 두 코드 공통으로 props에서 highlighted와 theme값을 받아온다고 생각하면 된다.
가독성이 후자가 더 좋다. 하지만 classNames의 기능을 이해하지 못하면 이게 무슨말인가 이해를 못할 수 있다.
또 classnames의 bind를 이용해서 더 짧은 변수에 할당시켜놓고 사용할수도 있다.
예제 코드 출처:리액트를 다루는 기술中
'React' 카테고리의 다른 글
리액트훅 useState에서 setState함수의 인자값에 대하여 (0) | 2020.04.17 |
---|---|
[리액트 훅(ReactHooks)] useMemo와 useCallback (0) | 2020.02.17 |
리액트(React)의 불변성과 map, filter, concat, slice (0) | 2020.02.13 |
React에서 ref를 사용하는 경우 (0) | 2020.02.11 |
리액트(React) JSX의 개념과 문법 정리 (0) | 2020.02.09 |