styled-components와 더 친해지기 위해 ThemeProvider를 이용해서 다크모드 예제를 만들어봤다.
🔻 theme.js
export const dark = {
colors: {
titleColor: "#fff",
bgColor: "#232332",
}
}
export const light = {
colors: {
titleColor: "#232332",
bgColor: "#fff",
}
}
import styled, { ThemeProvider } from "styled-components";
ThemeProvider
를 import 해준다.<import { light,dark } from "./theme";
<ThemeProvider theme={theme}>
<MainContainer>
<Button
title={theme === dark ? "라이트 모드" : "다크 모드"}
onclick={toggleTheme}
/>
</MainContainer>
</ThemeProvider>
ThemeProvider
를 최상위로 두어 나머지 컴포넌트들을 감싸준다.theme.js
에서 작성했던 light, dark 모드 테마를 import 해준다.🔻 Button.jsx
import styled from "styled-components";
function Button({ title, onclick }) {
return (
<ButtonContainer onClick={onclick}>
<ButtonText>{title}</ButtonText>
</ButtonContainer>
);
}
const ButtonContainer = styled.button`
width: fit-content;
height: 30px;
background-color: ${props => props.theme.colors.titleColor};
cursor: pointer;
`;
const ButtonText = styled.span`
color: ${(props) => props.theme.colors.bgColor};
`;
export default Button;
🔻 App.jsx
const [themeMode, setthemeMode] = useState(false);
const theme = themeMode === false ? light : dark;
const toggleTheme = () => {
setthemeMode(!themeMode);
};
themeMode
state를 동적으로 다뤄준다.