Higher Order Components (HOCs)

A higher-order component is a function that takes a component as parameter and returns a new component.

A Simple Higher Order Component

Example of a simple HOC.

import React from "react"

// Defining a HOC called 'withFavoriteNumber' and passing all components from 'App' component
export function withFavoriteNumber(component) {
    const Component = component
    return function(props){
        //  {...props} allows us to pass all props from 'App' component to our new Higher Order Component
        // 'favNum' is our new component's props 
        return <Component favNum="7" {...props} />
    }  
}

Sharing State with HOC

We can use HOC to achieve DRY principle & share logic between different components.

import React, {Component} from "react"
import {hocToggler} from "./HOCs/hocToggler"

function Favorite(props) {
    return (
        <div>
            <h3>Click heart to favorite</h3>
            <h1>
                <span 
                    onClick={props.toggle}
                >
                    {props.on ? "❤️" : "♡"}
                </span>
            </h1>
        </div>
    ) 
}

export default hocToggler(Favorite)

HOC can even take default props.

import React from "react"
import {hocToggler} from "./hocToggler"

// Functional component
function Favorite(props){
    return(
        <div>
            <h3>Click heart to favorite</h3>
            <h1>
                // Deriving method from HOC
                <span 
                    onClick={props.toggle} 
                >
                // Deriving state from HOC
                    {props.on ? "❤️" : "♡"}
                </span>
            </h1>
        </div>
    ) 
}

// Passing components & optionObjects to HOC
export default hocToggler(Favorite, {defaultOnValue:false})

Last updated

Was this helpful?