Skip to content

Instantly share code, notes, and snippets.

@phedkvist
Last active March 20, 2019 10:09
Show Gist options
  • Save phedkvist/d176328f055f20ec54949e88672842df to your computer and use it in GitHub Desktop.
Save phedkvist/d176328f055f20ec54949e88672842df to your computer and use it in GitHub Desktop.
Renderless component in React
import React from 'react';
import PropTypes from 'prop-types';
export default class MouseMovement extends React.Component {
constructor(props) {
super(props);
this.state = {
timer: undefined,
};
this.timeout = this.timeout.bind(this);
this.onMouseMove = this.onMouseMove.bind(this);
}
componentWillMount() {
document.addEventListener('mousemove', this.onMouseMove);
const timer = setTimeout(this.timeout, 4000);
this.setState({ timer });
}
componentWillUnmount() {
document.removeEventListener('mousemove', this.onMouseMove);
clearTimeout(this.state.timer);
this.setState({ timer: undefined });
}
onMouseMove() {
clearTimeout(this.state.timer);
const timer = setTimeout(this.timeout, 4000);
this.setState({ timer });
this.props.onMoved(true);
}
timeout() {
clearTimeout(this.state.timer);
this.props.onMoved(false);
}
render() {
return null;
}
}
MouseMovement.propTypes = {
onMoved: PropTypes.func.isRequired,
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment