일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Web
- JavaScript
- Webworker
- MicroFrontEnd
- MFA
- 오블완
- 자바스크립트
- vite
- 리액트
- sharedworker
- 프론트엔드
- CustomHook
- 리팩토링
- react
- provider 패턴
- server component
- 회고
- 이것저것
- 티스토리챌린지
- context.api
- CRA
- 합성 컴포넌트
- radixui
- 클린코드
- virtaullist
- 에세이
- TypeScript
- 웹워커
- frontend
- 아키텍처
- Today
- Total
Lighthouse of FE biginner
[클린코드 리액트] Css in JS 인라인 스타일 지양하기 본문
CSS-in-JS를 사용할 때, 스타일 코드를 인라인으로 지정하는 것은 일반적으로 지양되는 패턴 중 하나입니다. 대신에, 컴포넌트 외부에 스타일 코드를 선언하는 것이 권장됩니다. 여기서는 이러한 방법이 왜 더 좋은지, 그리고 어떤 장점을 가지는지 살펴보겠습니다.
외부 스타일 코드 선언하기
Emotion을 사용해 스타일을 할 때 emotion/css emotion/react 라이브러리를 활용해 스타일링을 할 수 있습니다. 이때 css API는 Tagged Function을 사용하는 것 보다는 JS 객체 형식의 스타일 코드를 사용하는 것이 권장됩니다. 이때 스타일 코드는 JSX에 인라인 스타일로 작성하는 것 보다는 컴포넌트 외부의 변수로 빼내어 사용하는 것이 성능에 좋습니다.
외부로 분리할 경우 장점
1. 랜더링 시 직렬화 회피: 스타일 코드를 외부로 분리함으로써, 스타일이 랜더링 될 때마다 직렬화되는 문제를 피할 수 있습니다. 이는 애플리케이션의 성능 향상에 도움이 됩니다.
2. 동적인 스타일 관리 용이: 외부 스타일로 분리하면 동적인 스타일을 실수로 건드리는 확률이 줄어듭니다. 이는 유지보수를 더욱 쉽게 만들어줍니다.
3. 로직과 스타일의 분리: 스타일 관련 코드를 분리함으로써, 로직에 집중할 수 있습니다. 이는 코드의 가독성을 향상시키고, JSX를 보다 간결하게 만들어줍니다.
CSS-in-JS를 사용할 때는 가능한 인라인 스타일을 지양하고, 외부에 스타일 코드를 선언하여 위의 장점을 누릴 수 있도록 하는 것이 좋습니다. 이는 애플리케이션의 유지보수성과 성능을 향상시킬 수 있는 중요한 원칙입니다.
샘플 코드
import { css } from "@emotion/react";
import React from "react";
const style = {
title: css({
color: "red",
fontSize: "24px",
}),
desc: css({
color: "blue",
fontSize: "12px",
}),
};
// Good Case
const Sample = () => {
return (
<div>
<h3 css={style.title}>title</h3>
<p css={style.desc}>desc</p>
</div>
);
};
// Bad Case
const SampleTwo = () => {
return (
<div>
<h3
css={css`
color: red;
font-size: 24px;
`}
>
title
</h3>
<p
css={css`
color: blue;
font-size: 12px;
`}
>
desc
</p>
</div>
);
};
'[WEB] 프론트엔드' 카테고리의 다른 글
[클린코드 리액트] 컴포넌트 내부에 컴포넌트 선언 지양하기 (0) | 2024.06.10 |
---|---|
[클린코드 리액트] Props로 Object 내리는 것 지양하기 (1) | 2024.06.09 |
[React] 커스텀 훅을 활용해 ExcelJS 로직 공통화 하기 (0) | 2024.05.24 |
[React] RSC (React Server Component) (0) | 2024.05.22 |
IntersectionObserver 활용하기 (1) | 2023.11.18 |