Skip to content

Instantly share code, notes, and snippets.

@brunolemos
Created December 20, 2016 00:53
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save brunolemos/df7621394abbfabfffc23f2b455e960d to your computer and use it in GitHub Desktop.
Save brunolemos/df7621394abbfabfffc23f2b455e960d to your computer and use it in GitHub Desktop.
React Debounce Render
// usage:
// export default debounce(100)(MyComponent);
import React from 'react';
import debounce from 'lodash/debounce';
export default (interval, ...debounceArgs) => {
if (typeof interval !== 'number' && interval > 0) {
throw new Error('[debounce] Interval (ms) parameter not received.');
}
return Component => class extends React.PureComponent {
constructor(props) {
super(props);
this.state = props;
}
updateStateWithProps = (props) => this.setState(props || this.props);
componentWillReceiveProps = debounce(this.updateStateWithProps, interval, ...debounceArgs);
render = () => <Component {...this.state} />;
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment