일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 티스토리 #폰트변경 #꾸미기
- 좌우슬라이드
- 가장작은자연수
- 윈도우10캡쳐 #윈도우10캡처 #윈도우10스크린샷 #캡쳐하기 #캡처하기 #스크린샷찍기 #캡쳐지연 #스크린샷지연
- 네트워크 #5G안터질때 #4G로바꾸는법 #5G를4G로 #5G를LTE로 #갤럭시5G변경
- 슬라이드다운
- 요일구하기
- 자바스크립트
- fadeint
- 자바스크립트 #메뉴만들기
- 음악검색기능 #음악찾기기능 #음악찾기 #음악검색 #네이버음악검색 #다음음악검색 #멜론음악검색
- 숫자게임만들기
- 요일구하는공식
- hover효과
- 파비콘 #파비콘만들기 #포토샵파비콘
- 메뉴
- 카카오톡알림설정 #카톡알림설정
- 동영상다운 #영상다운 #크롬웹스토어 #드래그되지않는 #클릭되지않는 #동영상
- 문자열다루기
- todolist
- React
- list추가하기
- fade-in
- darkmode
- ThemeProvider
- GIT
- 리액트
- array #object #lodash #javascript
- 프로그래머스
- 오류
- Today
- Total
잿꽃's posting Garden
REACT useContext을 이용한 darkmode 만들기 본문
REACT useContext를 이용하여 props을 전역 변수로 만들어서 darkmode를 만들어보자
[기초단계]
1. styled-components를 이용할 것이므로 설치한다.
터미널에서 yarn을 이용하여 설치한다.
yarn add styled-components
2. src폴더 내에 Components 폴더를 만들어서 세가지 js를 만든다.

3. 각각의 Components파일 내에 rsc + tab, enter를 누르면 함수형 컴포넌트가 만들어진다.

4. app.js에 세가지 Components를 연결한다.

5. 터미널에서 'yarn start'해서 확인
[실행단계]
1. 각각의 컴포넌트에 내용작성하고 styled-components로 꾸며준다.
시멘틱태그 사용할 경우 : const 변수이름 = styled.시멘틱태그이름` css내용 `;
시멘틱태그 사용 안 할 경우 : const 변수이름 = styled(이름)` css내용 `;
/////////////Header////////////////
import React from 'react';
import styled from 'styled-components';
const Header = () => {
return (
<HeaderWrapper>
<h1>반갑습니다</h1>
</HeaderWrapper>
);
};
const HeaderWrapper = styled.header`
width: 100%;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
`;
export default Header;
////////////////Content////////////////
import React from 'react';
import styled from 'styled-components';
const Content = () => {
return (
<ContentWrapper>
<p>좋은 하루 되세요</p>
</ContentWrapper>
);
};
const ContentWrapper = styled.section`
width: 100%;
display: flex;
justify-content: center;
align-items: center;
`;
export default Content;
/////////////Footer/////////////
import React from 'react';
import styled from 'styled-components';
const Footer = () => {
return (
<FooterWrapper>
<button>darkmode</button>
</FooterWrapper>
);
};
const FooterWrapper = styled.footer`
width: 100%;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
button{
height: 30px;
}
`;
export default Footer;
Footer에는 버튼으로 darkmode를 제어할 것이므로 button태그가 추가되었다.
2. src내 Context폴더와 js파일을 만든다.

ThemeDarkmode내에 작성한다.
createContext를 연결하고 const 변수 = createContext(기본값)으로 작성한다.
import { createContext } from "react";
export const ThemeDarkmode = createContext(null);
3. app.js에서 전역 변수로 만들 값을 생성하고 지정한다.
Context폴더 내에 만든 파일을 import한다.
버튼에 따라 상태 값이 변할 것이므로 useState를 사용했고 그 변수를 전역 변수로 지정했다.
import React, {useState} from 'react';
import Header from './Components/Header';
import Content from './Components/Content';
import Footer from './Components/Footer';
import { ThemeDarkmode } from './Context/ThemeDarkmode';
const App = () => {
// 상태작성을 위한 useState, 적용 안되면 상단에서 import적용할 것
const [isDark, setIsDark] = useState(false)
return (
//이름.Provieder value = {{전역변수}}
<ThemeDarkmode.Provider value = {{isDark, setIsDark}}>
<Header/>
<Content/>
<Footer/>
</ThemeDarkmode.Provider>
);
};
export default App;
4. 지정된 전역 변수를 각각의 Components파일에서 이용한다.
app.js에서 지정한 변수를 비구조 할당으로 가져올 수 있다.
Footer부분은 버튼으로 isDark의 값을 제어해야 하므로 변수를 두 개 가져왔고 나머지 Components는 제어하는 부분이 없기 때문에 값을 반영하는 isDark라는 변수 한 개만 가져왔다.
/////////////////Footer/////////////////
import React, { useContext } from 'react';
import styled from 'styled-components';
import { ThemeDarkmode } from './../Context/ThemeDarkmode';
const Footer = () => {
// 비구조할당으로 값을 가져온다.
// const {원하는 전역변수} = useContext(이름)
const {isDark, setIsDark} = useContext(ThemeDarkmode)
return (
<FooterWrapper style={{
backgroundColor : isDark ? "#333" : "#fff"
}}>
<button onClick={()=>setIsDark(!isDark)}>darkmode</button>
</FooterWrapper>
);
};
//button을 눌러 상태변환 해야 하므로 onClick이벤트에 setIsDark(!isDark)를 쓰면 isDark의 값이 토글된다.
const FooterWrapper = styled.footer`
width: 100%;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
button{
height: 30px;
}
`;
export default Footer;
///////////////Header///////////////
import React, { useContext } from 'react';
import styled from 'styled-components';
import { ThemeDarkmode } from './../Context/ThemeDarkmode';
const Header = () => {
const {isDark} = useContext(ThemeDarkmode)
return (
<HeaderWrapper style={{
backgroundColor : isDark ? "#333" : "#fff",
color : isDark ? "#fff" : "#333"
}}>
<h1>반갑습니다</h1>
</HeaderWrapper>
);
};
const HeaderWrapper = styled.header`
width: 100%;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
`;
export default Header;
///////////////Content///////////////
import React, { useContext } from 'react';
import styled from 'styled-components';
import { ThemeDarkmode } from './../Context/ThemeDarkmode';
const Content = () => {
const {isDark} = useContext(ThemeDarkmode)
return (
<ContentWrapper style={{
backgroundColor : isDark ? "#333" : "#fff",
color : isDark ? "#fff" : "#333"
}}>
<p>좋은 하루 되세요</p>
</ContentWrapper>
);
};
const ContentWrapper = styled.section`
width: 100%;
display: flex;
justify-content: center;
align-items: center;
`;
export default Content;
[결과 화면]


styled-components의 ThemeProvider로 만든 darkmode 만들기
https://flowerofashes.tistory.com/38
REACT styled-components 'ThemeProvider'를 이용한 darkmode만들기
REACT styled-components의 'ThemeProvider'를 이용한 darkmode만들어 보겠습니다. [기초단계] 1. styled-components를 이용할 것이므로 설치한다. 터미널에서 yarn을 이용해 설치한다. yarn add styled-component..
flowerofashes.tistory.com
'WEB > REACT' 카테고리의 다른 글
REACT Todolist 만들기 - 1 (0) | 2022.04.28 |
---|---|
REACT styled-components 'ThemeProvider'를 이용한 darkmode만들기 (0) | 2022.04.25 |
REACT HOOK의 용도 정리 (0) | 2022.04.23 |
REACT 'ToDoList'를 만들기 위한 기초 연습 (0) | 2022.04.21 |
REACT Component에 대한 정리 (0) | 2022.04.20 |