Skip to content

Instantly share code, notes, and snippets.

@satour
Created January 24, 2019 08:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save satour/c01970569a63c30bfdf2de3152fc0d8c to your computer and use it in GitHub Desktop.
Save satour/c01970569a63c30bfdf2de3152fc0d8c to your computer and use it in GitHub Desktop.
import React from 'react';
import PropTypes from 'prop-types';
export default class EventListener extends React.Component {
componentDidMount() {
this.getListeners().forEach( ( [ type, listener ] ) => {
this.props.eventTarget.addEventListener( type, listener );
} );
}
componentWillUnmount() {
this.getListeners().forEach( ( [ type, listener ] ) => {
this.props.eventTarget.removeEventListener( type, listener );
} );
}
getListeners() {
return Object
.keys( this.props )
.filter( key => key.startsWith( 'on' ) )
.map( key => [ key.slice( 2 ).toLowerCase(), this.props[key] ] );
}
render() {
return null;
}
}
EventListener.propTypes = {
eventTarget: PropTypes.object.isRequired,
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment