Skip to content

Instantly share code, notes, and snippets.

@andyfriesen
Created May 20, 2017 19:20
Show Gist options
  • Save andyfriesen/c3ad2ad94a9dbdc307fd858d50420225 to your computer and use it in GitHub Desktop.
Save andyfriesen/c3ad2ad94a9dbdc307fd858d50420225 to your computer and use it in GitHub Desktop.
module Clock = {
include ReactRe.Component.Stateful;
let name = "Clock";
type props = ();
type state = {now: Js_date.t, timerID: option Js_global.intervalId};
let getInitialState () => {
{ now: Js_date.make (), timerID: None };
};
let update {setState} _ => {
setState (fun {state} => {...state, now: Js_date.make ()});
None;
};
let componentDidMount {state, updater, setState} => {
switch (state.timerID) {
| None => Some {...state, timerID: Some (Js_global.setInterval (updater update) 1000)};
| _ => Some state;
}
};
let componentDidUnmount {state} => {
switch (state.timerID) {
| Some timerID => Js_global.clearInterval timerID
| _ => ()
};
};
let render {props, state, updater} =>
<div>{ReactRe.stringToElement (Js_date.toGMTString state.now)}</div>;
};
include ReactRe.CreateComponent Clock;
let createElement = wrapProps ();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment