1. 먼저 패키지를 설치한다
// "styled-components" 설치
npm i styled-components
// "styled-components" 타입 정의 설치
npm i -D @types/styled-components
//"css reset" 설치
npm i styled-reset
2. 아래와 같이 파일을 생성한다.
2-1. GlobalStyles.ts
- css reset 및 전역적으로 사용할 css를 설정해준다.
import { createGlobalStyle } from "styled-components";
import reset from "styled-reset"; // styled-reset 가져오기
const GlobalStyles = createGlobalStyle`
${reset} // reset 적용
/* Custom Global Styles */
body {
// 사용할 전역 스타일 설정
}
a {
text-decoration: none;
color: inherit;
}
img {
display: block;
max-width: 100%;
}
@media (max-width: 768px) {
body {
font-size: 14px;
line-height: 1.4;
}
}
`;
export default GlobalStyles;
2-2. theme.ts
- 전역에서 변수처럼 사용할 색상 및 크기 스타일을 지정해준다
const colors = {
// COLOR WHITE
white000: "#ffffff",
...
};
const fonts = {
mainEngFont: "Montserrat",
mainKorFont: "nanumSquareNeo",
mainNumFont: "gmarket",
};
const sizes = {
sm01: "0.75rem",
...
};
const theme = {
colors,
fonts,
sizes,
};
export default theme;
// theme 객체의 타입을 자동으로 추론하여 Theme 타입으로 지정
// 전역에서 자동완성을로 스타일을 사용하기 위함
export type Theme = typeof theme;
2-3. theme.d.ts
- styled-components의 DefaultTheme을 우리가 지정한 테마 타입을 상속시켜 확장하면,
- styled-components의 props에서 theme.colors.white000와 같은 방식으로 타입 검사를 수행하고 자동완성을 지원하게 할 수 있다!
import type { Theme } from "./theme";
// styled-components의 DefaultTheme을 확장해 우리가 만든 Theme 타입을 상속받아 포함하도록 한다.
// 원래는 Theme 타입이 수정될 때마다 이 정의도 수정해야 하는데,
// theme.ts에서 extends Theme 를 사용하여 Theme 타입의 변경 사항을 자동으로 반영할 수 있다.
declare module "styled-components" {
export interface DefaultTheme extends Theme {
}
}
3. GlobalStyles와 사용자 지정 스타일(theme) 적용하기
- ThemeProvider를 컴포넌트를 라우팅하는 BrowserRouter와 GlobalStyles를 감싸주도록 작성하면 된다.
import React from "react";
import HomeView from "@/pages/HomeView";
import { BrowserRouter, Route, Routes } from "react-router-dom";
import { ThemeProvider } from "styled-components";
import theme from "./assets/styles/theme";
import GlobalStyles from "./assets/styles/GlobalStyles";
function App() {
return (
<ThemeProvider theme={theme}>
<GlobalStyles />
<BrowserRouter>
<Routes>
<Route index path="/" element={<HomeView />}></Route>
</Routes>
</BrowserRouter>
</ThemeProvider>
);
}
export default App;
4. 적용하기
- 이제 사용자 지정 스타일 변수를 사용할 때, 타입 검사가 정상적으로 작동하며 코드 작성 시 자동완성이 가능한 것을 확인할 수 있다!
const Container = styled.div`
background-color: ${props => props.theme.colors.white000};
color: ${props => props.theme.colors.black900};
`;
'[Study] 개발 공부 > [React] 리액트 공부' 카테고리의 다른 글
[React] 스크롤에 따라 텍스트가 나타나는 효과 구현하기 (0) | 2024.11.06 |
---|---|
[React] 모바일에서는 메뉴가 버튼으로 바뀌는 반응형 헤더 만들어보기 (0) | 2024.11.04 |
[Vite+TS] alias 설정하기 (0) | 2024.09.06 |
[styled-components/React] React does not recognize the X prop on a DOM element 경고 메시지 해결하기 (0) | 2024.07.31 |
[React/TS] axios-mock-adapter 사용하여 PUT 요청 모킹하기 (0) | 2024.07.23 |