Skip to content

Instantly share code, notes, and snippets.

@sebmarkbage
Last active May 21, 2026 11:30
Show Gist options
  • Select an option

  • Save sebmarkbage/ef0bf1f338a7182b6775 to your computer and use it in GitHub Desktop.

Select an option

Save sebmarkbage/ef0bf1f338a7182b6775 to your computer and use it in GitHub Desktop.
Higher-order Components
import { Component } from "React";
export var Enhance = ComposedComponent => class extends Component {
constructor() {
this.state = { data: null };
}
componentDidMount() {
this.setState({ data: 'Hello' });
}
render() {
return <ComposedComponent {...this.props} data={this.state.data} />;
}
};
import { Enhance } from "./Enhance";
class MyComponent {
render() {
if (!this.data) return <div>Waiting...</div>;
return <div>{this.data}</div>;
}
}
export default Enhance(MyComponent); // Enhanced component
@danny-andrews-snap

Copy link
Copy Markdown

Wow, the React community really flubbed on terminology here. In this gist, the component utilizing what we call the HoC is called the HoC, whereas the thing we call the HoC is called an "Enhancer." This makes way more sense, as a "HoC," as it is known today, is not itself a component at all. Sad!!

@ivenxu

ivenxu commented Nov 24, 2018

Copy link
Copy Markdown

Not quite see the difference between HoC and old decorator pattern. I would say HoC is a nice react implementation of decorator pattern.

@dexygen

dexygen commented Jan 14, 2019

Copy link
Copy Markdown

Your constructor needs super(props) as the first line

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment