This a an implementation of the new context react context api in pure ReasonML
State
It seems to cover the base api. If there is something missing, please file an issue :D
Install
npm install --save reason-react-context
Example
An example of using this is at https://github.com/Hehk/example-reason-react-context
Creating a context:
type t = | Light | Dark; module Context = ReasonReactContext.CreateContext( { type state = t; let name = "Theme"; let defaultValue = Light; } );
Using the Provider module:
type action = | ChangeTheme(Theme.t); type state = {theme: Theme.t}; let component = ReasonReact.reducerComponent("App"); let make = _children => { ...component, initialState: () => {theme: Light}, reducer: (action, _state) => switch action { | ChangeTheme(newTheme) => ReasonReact.Update({theme: newTheme}) }, render: ({send, state}) => <div className="App"> <Theme.Context.Provider value=state.theme> <Background> <button onClick=(_e => send(ChangeTheme(state.theme === Dark ? Light : Dark)))> (ReasonReact.stringToElement("Toggle Theme")) </button> <Title message="Reason Context" /> </Background> </Theme.Context.Provider> </div>};
Using the Consumer module:
let component = ReasonReact.statelessComponent("background"); let make = children => { ...component, render: _self => <Theme.Context.Consumer> ...( theme => ReasonReact.createDomElement( "div", ~props={"className": theme === Light ? "background-light" : "background-dark"}, children ) ) </Theme.Context.Consumer>};