Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- CSS
- 개발콘텐츠
- 성능최적화
- 커스텀
- TSDoc
- Chart.js
- 2022
- 타입좁히기
- const 단언문
- 타입스크립트
- 공통컴포넌트
- 제네릭
- vue.js
- React Native
- 티스토리꾸미기
- react
- click and drag
- 리액트
- javascript
- 레이아웃쪼개기
- React.js
- 누구나 자료구조와 알고리즘
- JS console
- 반복줄이기
- 폰트적용하기
- reactjs
- NonNullable
- typescript
- returnType
- utilty type
Archives
- Today
- Total
몽땅뚝딱 개발자
[React] ThemeProvider 사용하기 본문
◽ ThemeProvider를 사용하는 이유
자주 사용하는 css를 변수로 설정할 수 있다.
📄 styled.d.ts
import { ColorTypes, FontSizeTypes } from './theme'
import 'styled-component'
// d.ts
// - 구현부가 아닌 선언부만을 작성하는 용도의 파일로 js 코드로 컴파일 되지 않는다.
declare module 'styled-components' {
export interface DefaultTheme {
colors: ColorTypes
fontSize: FontSizeTypes
}
}
📄 index.tsx
import App from './App'
import React from 'react'
import ReactDOM from 'react-dom/client'
import './index.css'
import { BrowserRouter } from 'react-router-dom'
import { Provider } from 'react-redux'
import store from './store/store'
import GlobalStyles from './GlobalStyles'
import { ThemeProvider } from 'styled-components'
import { theme } from './assets/scss/theme'
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement)
root.render(
<Provider store={store}>
<ThemeProvider theme={theme}>
<GlobalStyles />
<BrowserRouter>
<App />
</BrowserRouter>
</ThemeProvider>
</Provider>,
)
📄 theme.ts
import { DefaultTheme } from 'styled-components'
const colors = {
primaryColor: '#ffc92e',
secondaryColor: '#ffdddd',
}
const fontSize = {
xxl: '22px',
xl: '20px',
l: '18px',
m: '16px',
xs: '15px',
xxs: '14px',
}
export type ColorTypes = typeof colors
export type FontSizeTypes = typeof fontSize
export const theme: DefaultTheme = {
colors,
fontSize,
}
📄 컴포넌트 안에서 사용하기
.rank_tag {
position: absolute;
top: 10px;
left: 10px;
width: 24px;
height: 24px;
color: #fff;
font-weight: 700;
font-size: ${(props) => props.theme.fontSize.m};
line-height: 27px;
text-align: center;
background-color: ${(props) => props.theme.colors.primaryColor};
border-radius: 4px;
}
개인적으로 공부한 내용을 정리하는 블로그로
잘못된 개념을 게시하지않도록 주의하고 있으나 오류가 있을 수 있습니다.
'Development > React.js · Next.js' 카테고리의 다른 글
[React] 카카오맵 사용하기 With. 타입스크립트 - (2) 마커 출력하기 (0) | 2023.02.16 |
---|---|
[React] 카카오맵 사용하기 With. 타입스크립트 - (1) key 발급과 스크립트 적용하기 (0) | 2023.02.16 |
[React] 리덕스(Redux) (0) | 2023.02.14 |
[React] react-query와 API 정리 (0) | 2023.02.10 |
[React] stylelint, prettier, eslint 적용하기 (작성 중) (0) | 2023.02.10 |
Comments