반응형
material-ui에 테마적용은 잘 되는데, sytled-components 에는 안될때는 ThemeProvider를 살펴봐야 한다.
각각 제공하는 ThemeProvider가 있는데 다음과 같다.
// material-ui
import {ThemeProvider as MuiThemeProvider} from "@material-ui/core";
// styled-components
import {ThemeProvider as StyledThemeProvider} from "styled-components"
이 두개를 다 적용해줘야 styled-components 에서 테마를 꺼내쓰는게 가능하다.
예를들면 다음처럼 설정.
_app.js 파일 내
...
import {CssBaseline, ThemeProvider as MuiThemeProvider} from "@material-ui/core";
import {ThemeProvider as StyledThemeProvider} from "styled-components"
import {StylesProvider} from "@material-ui/styles";
...
const defaultTheme = createMuiTheme({
palette: {
primary: indigo,
},
});
return (
<>
<StylesProvider injectFirst>
<StyledThemeProvider theme={defaultTheme}>
<MuiThemeProvider theme={defaultTheme}>
<CssBaseline />
<Layout>
<Component {...pageProps} />
</Layout>
</MuiThemeProvider>
</StyledThemeProvider>
</StylesProvider>
</>
)
...
StylesProvider 는 Material-UI -> Styled-Components 의 순으로 바꾸는 역할을 하는데 필수로 적용해줘야 Styled-Components 가 제대로 작동한다.
그럼 이제 Styled-components 에서 theme를 사용하는 방법을 활용해보자
const CustomBox = styled(Box)`
${({ theme }) => `
background-color: ${theme.palette.primary.main};
`}
`
props 안에 있는 theme의 설정정보를 로드해 적용한다.
관련 문서는 다음 페이지 확인.
https://material-ui.com/guides/interoperability/#theme
끝.
반응형
'공부 > 프로그래밍' 카테고리의 다른 글
[jquery] file upload form을 ajax로 전송하기 (1) | 2021.04.21 |
---|---|
[react] 하위 Component에서 children 을 지정하지 않아 에러가 나는 경우-TS2322: Type '{ children: never[];... (0) | 2021.04.12 |
[springboot, jwt] jwt로 security 적용 & error 때 result form 지정해 리턴하기 (0) | 2021.04.07 |
[springboot, jwt] jwt 로 토큰 생성, 유효시간 관리 하기 (1) | 2021.04.05 |
[react, springboot] kakao 로그인 API 연동 (0) | 2021.04.02 |
댓글