Skip to content

Instantly share code, notes, and snippets.

@karol-majewski
Created November 4, 2020 20:24
Show Gist options
  • Save karol-majewski/dee1852381e087426df34523ae9151ae to your computer and use it in GitHub Desktop.
Save karol-majewski/dee1852381e087426df34523ae9151ae to your computer and use it in GitHub Desktop.
The simplest possible higher-order component in React
export function withHover<T>(WrappedComponent: React.ComponentType<T & Hoverable>): React.ComponentClass<T> {
return class extends React.Component<T> {
state = {
hover: false,
};
onMouseEnter: React.MouseEventHandler = () => {
this.setState({ hover: true });
};
onMouseLeave: React.MouseEventHandler = () => {
this.setState({ hover: false });
};
render() {
return this.state.hover ? <WrappedComponent onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave} {...this.props} /> : 2;
}
};
}
interface Hoverable<T = Element> {
onMouseEnter: React.MouseEventHandler<T>;
onMouseLeave: React.MouseEventHandler<T>;
}
interface Props extends Hoverable<HTMLDivElement> {}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment