상태관리해주는 리액트 내장 기능.
컴포넌트 설계가 깊지 않은경우 복잡한 리덕스를 사용하지 않고도 간단하게 상태관리가 가능함.
import React, {createContext} from 'react';
const MyContext = createContext();
export default MyContext;
<MyContext.Provider value={/*어떤값*/}>
class App extends React.Component {
render() {
return <Toolbar theme="dark" />;
}
}
function Toolbar(props) {
return (
<div>
<ThemedButton theme={props.theme} />
</div>
);
}
class ThemedButton extends React.Component {
render() {
return <Button theme={this.props.theme} />;
}
}
const ThemeContext = React.createContext('light');
class App extends React.Component {
render() {
//provider에 value로 프롭스를 내려준다.
// 아무리 깊숙히 있어도, 모든 컴포넌트가 이 값을 읽을 수 있다.
return (
<ThemeContext.Provider value="dark">
<Toolbar />
</ThemeContext.Provider>
);
}
}
// 중간에 있는 컴포넌트가 일일이 테마를 넘겨줄 필요 없음.
function Toolbar() {
return (
<div>
<ThemedButton />
</div>
);
}
class ThemedButton extends React.Component {
// 현재 선택된 테마 값을 읽기 위해 contextType을 지정
// React는 가장 가까이 있는 테마 Provider를 찾아 그 값을 사용할 예정
static contextType = ThemeContext;
render() {
return <Button theme={this.context} />;
}
}