Skip to content

Instantly share code, notes, and snippets.

Last active January 31, 2024 18:33
Show Gist options
  • Save sebmarkbage/ef0bf1f338a7182b6775 to your computer and use it in GitHub Desktop.
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={} />;
import { Enhance } from "./Enhance";
class MyComponent {
render() {
if (! return <div>Waiting...</div>;
return <div>{}</div>;
export default Enhance(MyComponent); // Enhanced component
Copy link

I created a forked showing how I used this with ES7 decorators: (Also fixes a few issue with this gist)

Copy link

seeden commented Jun 24, 2016

I created two packages which you can use for creating of high-order components.
With react-provide-props you can easily create high-order component which will add props to other components. It will create state-less high-order compoment.
Second package react-high-order-provider you can use for state-full high-order components where you can define your own logic.

Both libraries will create function compatible with ES7 decorators as well.

Copy link

Musbell commented Jul 9, 2016

Hey guys! you can checkout my example.

import React, { Component } from 'react';
import ReactDOM from 'react-dom';

let HOC = WrappedComponent => {
return class extends Component{
this.state = {
name : ' '
this.onNameChange = this.onNameChange.bind(this)
name :
const newProps = {
value :,
onChange : this.onNameChange
return <WrappedComponent {...this.props} {...newProps} {...this.state}/>

let App = HOC((props) => {
<div> <input type="text" {...props}/> <p>{}</p> </div>

<App />,

Copy link

Musbell commented Jul 9, 2016

I love the libraries, they are both great 👍

Copy link

stiofand commented May 4, 2017

Interesting examples, is there any particular advantage of attempting to enforce OO over HOC? Anyhow, fun to follow the thread. Pedantic point of note, why in all the ES6 / ES7 examples are there still references to "var"? Also arrow functions implicitly return whatever is after them, so if no multi-expressions are needed, then no need for the curlies!

Anyhow.. I digress....

Copy link

I love this gist, because it shows a simple example for a higher order component.

I am not sure if this is the perfect place, but maybe people are interested to read a more elaborated gentle introduction to higher order components when they come across this gist looking for HOC examples.

Copy link

Hello everyone, I came across a good blog which is about React Higher Order components. It was completely awesome and explained in well manner. Have a look into it: Link
I hope you will learn knew content about React HOCs.
ReactJS Online Training

Copy link

Musbell commented Jun 11, 2017

Thanks for the links 👍 @rwieruch @Ramyace4455

Copy link

is this the first ever written HOC ?

Copy link

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!!

Copy link

ivenxu commented Nov 24, 2018

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

Copy link

dexygen commented Jan 14, 2019

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