원문 : https://blog.devgenius.io/best-ways-to-style-a-react-js-application-c818b71f6341
React-JS 프로젝트를 시작할 때마다 일반적으로 이 특정 프로젝트에서 스타일링 방법론에 따라야 할지에 대해 논의합니다. 따라서 다음 스타일링 옵션에 대해 논의하고 각 옵션의 장단점과 제가 개인적으로 선호하는 스타일에 대해 설명하겠습니다.
우선, 스타일링 옵션을 고려할 떄 다음과 같은 측면을 고려해야 하며, 이를 중심으로 스타일링 옵션을 비교하겠습니다.
인라인 스타일은 JSX 요소의 style 프로퍼티에 모든 스타일을 전달할 때 사용합니다. 이러한 스타일은 자바스크립트 객체로 전달되며 일반 자바스크립트에서 사용하는 모든 변수를 사용합니다.
const styles = {
backgroundColor: 'red',
color: 'blue'
}
return (<div style={styles}>some text</div>)
스타일 어떻게 카멜 케이스 형식으로 되어 있는지 주목하세요. 또한 스타일은 문자열로 전달됩니다.
px 단위로 변환제 애플리케이션에서는 시간이 매우 부족하거나 작은 컴포넌트 혹은 작은 프로젝트를 만드는 경우가 아니라면 인라인 스타일을 선호하지 않습니다.
인라인 스타일링은 자바스크립트 객체이고 리액트 상태와 호환되므로 상태를 사용하여 소규모 프로젝트의 스타일링을 조작할 수 있습니다.
전역 스타일링은 React 프로젝트에 전체 스타일 파일을 빌드하는 App.css 혹은 index.css 파일이 있는 경우입니다. App.js에서 스타일 파일을 가져옵니다.
import React from 'react';
import './App.css';
import MyApp from './MyApp';
const App = (props) => {
return <div className="app">
<MyApp />
</div>
}
export default App
모든 컴포넌트에서 모든 클래스를 사용할 수 있습니다.
import React from 'react';
const MyApp = (props) => {
return(
<div className="my-app">Hello</div>
)
}
.my-app {
background-color: red;
}
.app {
font-size: 16px;
}
몇가지 중요한 사항이 있습니다.
className 프로퍼티를 사용하면 어느 컴포넌트에서나 액세스 할 수 있으며, CSS 스타일시트의 범위는 전역입니다.극히 짤은 시간에 재한된 기능과 매우 적은 수의 페이지로 구성된 소규모 프로젝트이고, 유지 관리에 돈을 쓰지 않을 경우 적절합니다.
SASS는 CSS 전처리기입니다. 간단히 말해, 프로덕션 전에 모든 코드를 하나의 전역 CSS 파일로 컴파일합니다. SASS로 스타일링을 하는 동안 프로그래머같은 느낌을 줍니다. 이는 함수, 믹스인, 루프 등 스타일링에서 동적인 로직을 만들 수 있기 때문입니다.
모든 CSS 파일에는 전역 범위가 있습니다. 즉, 실수로 클래스 이름을 오버라이드하는 경우가 매우 흔합니다. 따라서 CSS 모듈을 사용하면 필요한 JSX 컴포넌트로만 범위가 제한된 로컬 CSS 파일을 갖게 됩니다.
예를 들어 Component.jsx 라는 파일이 있는 경우 해당 스타일 파일을 빌드하려면 .module.css로 이름을 바꿔야 합니다.
import styles from './Component.module.css'
이제 클래스 이름을 변수로 전달합니다.
.button {
background: red;
}
import React from 'react'
import styles from './Component.module.css'
const Component = (props) => {
return (<div className={styles.button}>Hello</div>
}
export default Component
이제 리액트가 이 클래스에 고유한 이름을 부여함으로 앱의 다른 곳에서 이 버튼 클래스를 사용해도 이름이 충돌하지 않습니다.
이는 로컬 클래스 이름 때문에 글로버 SCC와 SASS에서 크게 개선된 점이빈다. 따라서 재사용 가능한 UI 객체를 빌드하려면 해당 컴포넌트에 해당하는 module.css 파일만 빌드하면 됩니다. 따라서 재사용 가능한 React 컴포넌트에만 첨부되므로 컴포넌트 재사용의 복잡성이 줄어들고 이름 충돌이 발생하지 않아 유지보수가 쉬워집니다.
프로젝트를 받았는데 마감 기한이 매우 짧고 스타일을 재정의하여 작은 디자인 버그를 빠르게 수정하고 싶을 때 CSS 모듈을 사용할 것입니다. 그 외에는 훨씬 더 많은 이점을 제공하는 다른 스타일링 옵션이 있기 떄문에 CSS 모듈을 선택하지 않을 것입니다.
CSS-in-JS는 자바스크립트 파일 내에서 CSS를 사용하여 클래스로 전달하는 스타일링 옵션입니다. 이 과정은 JavaScript를 사용하여 스타일을 요소에 전달하면 컴파일러가 이를 CSS로 변환하여 적절하게 첨부하는 방식입니다.
다음과 같이 CSS-in-JS 프레임워크를 기반으로 구축된 많은 라이브러리가 있습니다.
CSS-in-JS를 이야기할 때, 이 기능을 수행하는 많은 라이브러리가 있다는 점에 유의하는 것이 중요합니다. 하지만 제가 개인적으로 좋아하는 것은 스타일드 컴포넌트입니다. CSS-in-JS는 모두 거의 동일한 기능을 제공하며 가장 많이 요구되는 스타일링 방식이라는 점에 유의해야 합니다. 유일한 차이점은 구문과 데이터가 전달되는 방식에 있습니다. 따라서 스타일드 컴포넌트는 문법이 가장 쉽기 때문에 가장 선호하는 방법입니다. 하지만 스타일드 컴포넌트에서 스타일을 prop로 전달하는 JSS나 이모션과 달리 컴포넌트의 이름을 지정합니다. 따라서 스타일 컴포넌트를 사용할 때 한 가지 작은 단점은 스타일 컴포넌트의 이름을 짓는데 어려움을 겪을 수 있습니다.
props를 스타일링 솔루션에 직접 사용할 수 있습니다.index.html 파일의 스타일 태그 안에 모든 것을 넣습니다. 이렇게하면 HTML 파일 크기가 증가합니다.나는 일반적으로 CSS-in-JS를 사용합니다. 그 외에는 규모가 작고 즉시 사용 가능한 솔루션이 필요하며 CSS가 자바스크립트를 많이 포함되지 않은 경우입니다. 하지만 오래된 ReactJS 프로젝트, 클래스 기반 컴포넌트를 기반으록 구축된 프로젝트에서는 SASS를 사용합니다.
CSS-in-JS와 인라인 스타일은 차이점은 CSS-in-JS를 클래스 이름을 제공하고 인라인 스타일은 HTML 요소의 스타일 속성에 직접 스타일을 삽입합니다. 따라서 인라인 스타일은 성능 친화적이지 않습니다.