드디어 ThemeProvider를 활용하는 방법이다.
다크모드, 화이트 모드를 적용하기 위해서는 어플리케이션의 모든 컴포넌트들이 모드가 변경될 때마다 적용되어야하기 때문에 App.js가 아니라 index.js에 설정을 추가한다.
...
import { ThemeProvider } from 'styled-components';
...
const darkTheme = {
textColor: 'whitesmoke',
backgroundColor: '#111',
};
const lightTheme = {
textColor: '#111',
backgroundColor: 'whitesmoke',
};
ReactDOM.render(
<React.StrictMode>
<ThemeProvider theme={lightTheme}>
<App />
</ThemeProvider>
</React.StrictMode>,
document.getElementById('root')
);
const Wrapper = styled.div`
display: flex;
background-color: ${(props) => props.theme.backgroundColor};
`;
const Box = styled.div`
color: ${(props) => props.theme.textColor};
height: 200px;
width: 200px;
background-color: ${(props) => props.theme.backgroundColor};
display: flex;
`;
function App() {
return (
<Wrapper>
<Box>
<Emoji>😀</Emoji>
</Box>
<Emoji>😁</Emoji>
<Box>This is a box</Box>
</Wrapper>
);
}
index.js ThemeProvider의 theme속성 하나가 바뀌면 전체 테마가 바뀐다.