주로 어플리케이션에서 전역적으로 데이터가 사용되야 할 때 사용한다. 여러 컴포넌트를 거쳐서 값을 전달하는 것이 아니라 Context를 통해서 원하는 값이나 함수를 전달할 수 있따.
const Context = createContext();
const { Provider, Consumer } = Context;
const SampleProvider = ({ children }) => {
const [value, setValue] = useState("Hello");
return <Provider value={value}>{children}</Provider>;
};
const Lower = () => <Consumer>{(value) => <div>{value}</div>}</Consumer>;
const Upper = () => <Lower />;
const App = () => {
return (
<SampleProvider>
<Upper />
</SampleProvider>
);
};
const AppProvier = ({contexts, children}) => contexts.reduce((prev, context) => React.createElement(context, { children: prev }), children);
const App = () => {
return (
<AppProvider contexts={[Provider1, Provider2]}>
<Component />
</AppProvider>
)
}
const themes = {
light: {
foreground: "#000000",
background: "#eeeeee"
},
dark: {
foreground: "#ffffff",
background: "#222222"
}
};
const ThemeContext = React.createContext(themes.light);
function App() {
return (
<ThemeContext.Provider value={themes.dark}>
<Toolbar />
</ThemeContext.Provider>
);
}
function Toolbar(props) {
return (
<div>
<ThemedButton />
</div>
);
}
function ThemedButton() {
const theme = useContext(ThemeContext);
return (
<button style={{ background: theme.background, color: theme.foreground }}>
I am styled by theme context!
</button>
);
}