--- title: useContext Hook description: "Details about the useContext React hook in ReScript" canonical: "/docs/react/latest/hooks-context" --- # useContext Context provides a way to pass data through the component tree without having to pass props down manually at every level. The `useContext` hooks gives access to such Context values. > **Note:** All the details and rationale on React's context feature can be found in [here](./context). ## Usage ```res let value = React.useContext(myContext) ``` Accepts a `React.Context.t` (the value returned from `React.createContext`) and returns the current context value for that context. The current context value is determined by the value prop of the nearest `` above the calling component in the tree. ## Examples ### A Simple ThemeProvider ```res example // App.res module ThemeContext = { let context = React.createContext("light") module Provider = { let make = React.Context.provider(context) } } module ThemedButton = { @react.component let make = () => { let theme = React.useContext(ThemeContext.context) let (color, backgroundColor) = switch theme { | "dark" => ("#ffffff", "#222222") | "light" | _ => ("#000000", "#eeeeee") } let style = ReactDOMStyle.make(~color, ~backgroundColor, ()) } } module Toolbar = { @react.component let make = () => {
} } @react.component let make = () => {
} ``` ```js var context = React.createContext("light"); var make = context.Provider; var Provider = { make: make }; var ThemeContext = { context: context, Provider: Provider }; function App$ThemedButton(props) { var theme = React.useContext(context); var match; switch (theme) { case "dark" : match = [ "#ffffff", "#222222" ]; break; case "light" : match = [ "#000000", "#eeeeee" ]; break; default: match = [ "#000000", "#eeeeee" ]; } var style = { backgroundColor: match[1], color: match[0] }; return React.createElement("button", { style: style }, "I am a styled button!"); } var ThemedButton = { make: App$ThemedButton }; function App$Toolbar(props) { return React.createElement("div", undefined, React.createElement(App$ThemedButton, {})); } var Toolbar = { make: App$Toolbar }; function App(props) { return React.createElement(make, { value: "dark", children: React.createElement("div", undefined, React.createElement(App$Toolbar, {})) }); } ```