PLATFORM
  • Tails

    Create websites with TailwindCSS

  • Blocks

    Design blocks for your website

  • Wave

    Start building the next great SAAS

  • Pines

    Alpine & Tailwind UI Library

  • Auth

    Plug'n Play Authentication for Laravel

  • Designer comingsoon

    Create website designs with AI

  • DevBlog comingsoon

    Blog platform for developers

  • Static

    Build a simple static website

  • SaaS Adventure

    21-day program to build a SAAS

Composition vs Inheritance in React

Composition vs Inheritance in React

%%[mail]


In React, the composition is the natural pattern of the component model. It's how we build component form other components, of varying complexity and specialization through props. Depending on how generalized these components are they can be used in building many other components.


React has powerful composition model, and I recommend using the composition instead of inheritance to reuse code between components. Here, we will consider a few problems where developers new to React often reach for inheritance, and how we can solve them with composition.

Containment

Some components don't know their children ahead of time. React recommends that such components use the special children prop to pass children elements directly into their output:

function FanceBorder(props) {  
    return (  
    <div className={'FancyBorder FanceBorder-' + props.color}>  
            {props.children}  
        </div>  
    );   
}  

Anything inside the <FanceBorder> JSX tag gets passed into the FancyBorder component as children prop. Since FanceBorder renders {props.children} inside a <div, the passed elements appear in the final output.

function WelcomeDialog() {  
    return (  
        <FancyBorder color="blue">  
        <h1 className="Dialog-title">  
            Welcome  
            </h1>  
            <p className="Dialog-message">  
            Thank you for visiting!  
            </p>  
        </FancyBorder>      
    );   
}  

Specialization

Sometimes we think about components as being special cases of other components. For example, we might say that WelcomeDialog is a special case of Dialog.

In React, this is also achieved by composition, where a more "specific" component renders a more "generic" one and configures it with props:

function WelcomeDialog() {  
    return (  
        <FancyBorder color="blue">  
        <h1 className="Dialog-title">  
            {props.title}  
            </h1>  
            <p className="Dialog-message">  
            {props.message}  
            </p>  
        </FancyBorder>      
    );   
}

function WelcomeDialog() {  
    return (  
    <Dialog   
        title="Welcome"  
        message="Thank you for visiting!" />  
    );   
}  

So what about inheritance?

Facebook uses React thousands of components, and they haven't found any use cases where they would recommend creating component inheritance hierarchies.

Props and composition give you all the flexibility you need to customize a component's look and behaviour explicitly and safely. Remember that, a component may accept arbitrary props, including primitive values, React elements, or functions.


⚔Thanks For Reading | Happy CodingšŸ“˜

%%[bmc]

Comments (0)

loading comments