인라인 스타일을 작성하지만 클래스가 되는 매직 ✨기존 style 속성은 HTML 인라인 스타일로 주입이 된다. 스타일 우선순위를 다루기 어렵고 스타일 재활용도 힘들다.emotion jsx에서 제공해주는 css 속성을 활용하면 이를 클래스로 변환해준다. 기존 인라인으로 사용할 수 없었던 media query, pseudo selector, nested selector 등을 사용할 수 있다.
<divcss={{color:"red"}}/> {/* 혹은 */} <divcss={css`color:red`}/>
<divstyle={{color:"red"}}/>
css props를 결합하여 복잡한 스타일링을 진행할 수 있다.위와 같이 css 변수를 조립하여 컴포넌트 스타일링을 진행할 수 있다.typescript로 자동 타입지정까지 할 수 있는 이점이 있다.
css override는 덤
type ThemeType =keyoftypeof themes;type SizeType =keyoftypeof size;
파일마다/** @jsx jsx */ 라는 JSX Pragma를 작성해야하는데 이를 설정하기 귀찮다.
이는 React의 jsx와 똑같은 원리이다. import React from "react"을 해줘야 컴파일이 된다. emotion의 jsx로 변환되어야 emotion의 css props 문법을 사용할 수 있다. <img src="avatar.png" />→jsx('img', { src: 'avatar.png' })
react처럼 webpack단에서 이를 자동으로 주입시킬 수 있지만 역시 설정하기 귀찮다... 개인적으론 storybook 웹팩 설정에서 꽤나 골머리 아팠다...
결론
유의미한 성능차이가 있는 것이 아니다. 라이브러리 버전에 따라 달라질 수 있다.
개발팀에서 더 익숙한 것을 사용하면 될 것 같다.
emotion의 css props로 css를 더 활용도 높게 조립할 수 있다. 하지만 안쓰면 그만이다.