darkmode / lightmode 등 theme을 일괄 적용할 수 있는 친구
- 반드시 theme={}를 채워줘야 한다
{clickFun, name}
로 만듦import React from 'react';
import ReactDOM from "react-dom"
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
import { useState } from "react";
import styled from "styled-components";
import { ThemeProvider } from 'styled-components';
import MyButton from "./MyButton";
const Title = styled.h1`
color: ${(props) => props.theme.textColor}
`;
const Wrapper = styled.div`
display: flex;
height: 100vh;
width: 100vw;
justify-content: center;
align-items: center;
background-color: ${(props) => props.theme.backgroundColor};
`;
// 다크모드
const darkTheme = {
textColor: "whitesmoke",
backgroundColor: "#111",
};
const lightTheme = {
textColor: "#111",
backgroundColor: "whitesmoke",
};
function App() {
const [dark, setDark] = useState(false);
const [mode, setMode] = useState(darkTheme);
const [name, setName] = useState('darkTheme');
const clickFun = () => {
setDark(!dark);
if(dark){
setMode(lightTheme);
setName('lightTheme');
}else{
setMode(darkTheme);
setName('darkTheme');
}
}
return (
<ThemeProvider theme={mode}>
<Wrapper as="header">
<MyButton
name={name}
clickFun={clickFun}
/>
<Title>삐용삐용</Title>
</Wrapper>
</ThemeProvider>
)
}
export default App;
<ThemeProvider theme={mode}></ThemeProvider>
로 모드 일괄 적용name, mode
안하면 자동변경 안됨 !!! import styled from "styled-components";
const Button = styled.button`
border: none;
padding: 15px 30px;
border-radius: 15px;
text-decoration: none;
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2);
font-weight: 600;
position: absolute;
top: 30px;
color: ${(props) => props.theme.textColor};
background-color: ${(props) => props.theme.backgroundColor};
`;
function MyButton({clickFun, name}) {
return (
<Button onClick={clickFun}>{name}</Button>
)
}
export default MyButton;
ThemeProvider
결과를 가져올 수 있음