Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
Tags
- ㅒ
- 선형대수
- 자료구조와함께배우는알고리즘입문
- 자료구조와 함께 배우는 알고리즘 입문
- 서버설정
- /etc/network/interfaces
- Kernighan의 C언어 프로그래밍
- 스프링부트핵심가이드
- 스프링 시큐리티
- 이터레이터
- baeldung
- 목록처리
- resttemplate
- iterator
- 티스토리 쿠키 삭제
- 자바편
- 처음 만나는 AI수학 with Python
- d
- 코드로배우는스프링웹프로젝트
- 알파회계
- GIT
- 코드로배우는스프링부트웹프로젝트
- 친절한SQL튜닝
- 페이징
- 처음 만나는 AI 수학 with Python
- 구멍가게코딩단
- 데비안
- 리눅스
- network configuration
- 네트워크 설정
Archives
- Today
- Total
bright jazz music
생활코딩: context API 본문

1. style.css 작성
.root,
.root div{
border: 10px solid gray;
margin: 10px;
padding: 10px;
}
2. App.js 작성
// Context API: 전역적으로 상태를 공유할 수 있도록 하는 도구
// 리액트에서 컨텍스트를 만들려면 createContext라는 함수를 임포트 해야 한다.
import React, {createContext, useContext} from "react";
import "./style.css";
const themeDefault = {border: '10px solid red'};
// 컨텍스트의 기본값이 themeDefault가 되었다.
const themeContext = createContext(themeDefault);
// 함수형에서는 useContext라는 함수를 임포트 하고 컴포넌트에서 사용하면 된다.
export default function App(){
//컴포넌에서 컨텍스트 사용
const theme = useContext(themeContext);
console.log('##theme', theme);
return(
<themeContext.Provider value={{border:'10px solid blue'}}> {/*<Sub2>의 테두리는 빨간색, 감싸고 있는 <Sub3>의 테두리가 파란색이 된다. 그 하위 컴포넌트들도 다 파란색으로 적용된다.*/}
<div className="root" style={theme}>
<h1>Hello World!</h1>
<Sub1 />
</div>
</themeContext.Provider>
);
}
function Sub1(){
const theme = useContext(themeContext);
{/* 컴포넌트마다 반복할 수는 없다. 위처럼 Provider 컴포넌트를 사용해야 한다.*/}
{/* Provider 컴포넌트는 value값이 반드시 필요하다. */}
return(
// <themeContext.Provider value={{border:'10px solid green'}}>
// <themeContext.Provider value={{border:'10px solid green'}}> {/*<Sub2>의 테두리는 빨간색, 감싸고 있는 <Sub3>의 테두리가 녹색이 된다.*/}
<div style={theme}>
<h1>Sub1</h1>
<Sub2></Sub2>
</div>
// </themeContext.Provider>
);
}
function Sub2(){
const theme = useContext(themeContext);
return(
// <themeContext.Provider value={{border:'10px solid green'}}> {/*<Sub2>의 테두리는 빨간색, 감싸고 있는 <Sub3>의 테두리가 녹색이 된다.*/}
<div style={theme}>
<h1>Sub2</h1>
<Sub3></Sub3>
</div>
// </themeContext.Provider>
)
}
function Sub3(){
const theme = useContext(themeContext);
console.log('##theme3', theme);
return(
<div style={theme}>
<h1>Sub3</h1>
</div>
)
}
/*
모든 컴포넌트마다 useContext(themeContext)를 넣어서 사용하면 컨텍스트값이 바뀔 때 전부 바뀐다.
그렇다고 모든 개별 컴포넌트의 스타일을 일일이 지정하는 것도 무리다.
따라서 전체적으로 적용해야 하는 값에는 const theme= useContext(themeContext); 방식을 사용해서 바꿔주되,
달라야 하는 컴포넌트는 <Provider> 컴포넌트를 사용해서 개별 값을 적용해준다. e.g. <themeContext.Provider value
즉 컨텍스트를 이용하면 전역적으로 상태를 공유할 수 있다.
만약 특정 컴포넌트의 설정을 바꾸기를 원한다면 그 상위 컴포넌트에 <Provider>를 적용하여 그 하위 컴포넌트에서 간편하게 값을 공유할 수 있다.
*/'Framework > ReactJs' 카테고리의 다른 글
| 생활코딩: react-redux 예제1 (0) | 2023.05.17 |
|---|---|
| 생활코딩: useReducer (0) | 2023.05.16 |
| 생활코딩: styled-components (0) | 2023.05.16 |
| 생활코딩: React-Router-DOM 실습 (0) | 2023.05.15 |
| 생활코딩: 리액트 프로그래밍 CRUD 기본 (0) | 2023.05.14 |
Comments