Skip to content

Instantly share code, notes, and snippets.

@arackaf
Last active November 20, 2017 02:30
Show Gist options
  • Save arackaf/e57ccd495e3fb65191947e83c8ebeef0 to your computer and use it in GitHub Desktop.
Save arackaf/e57ccd495e3fb65191947e83c8ebeef0 to your computer and use it in GitHub Desktop.
import {render} from 'react-dom';
import React, {Component, Children, cloneElement} from 'react';
class CurrentTime extends Component {
state = {time: ''};
componentDidMount() {
this._interval = setInterval(() => this.setState({time: this.getTime()}), 50);
}
componentWillUnmount() {
clearInterval(this._interval);
}
getTime(){
let t = new Date();
return `${t.getHours()}:${t.getMinutes()}:${t.getSeconds()}`;
}
render() {
let {render: renderFn, children: child} = this.props;
return renderFn
? renderFn({time: this.state.time})
: cloneElement(Children.only(child), {time: this.state.time})
}
}
class ShowCurrentTime extends Component {
render() {
return (
<div>
<span style={{color: 'green'}}>Time is {this.props.time} from component</span>
</div>
);
}
}
render(
<div>
<CurrentTime render={({time}) => (
<div>
<span style={{color: 'purple'}}>Time is {time} from callback</span>
</div>
)} />
<CurrentTime>
<ShowCurrentTime />
</CurrentTime>
</div>, document.getElementById('home')
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment