Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

How to inherit one class from another in ReactJS

Introduction to Inheritance in ReactJS

In the world of programming, the term "inheritance" refers to a concept where one class acquires the properties (like fields and methods) of another class. However, in ReactJS, a popular JavaScript library for building user interfaces, we do not usually use inheritance to build components. Instead, we use "composition". But, before we dive into the details, let's take a moment to understand these jargons.

In simple words, a class is like a blueprint for creating objects (a particular data structure), providing initial values for state (member variables) and implementations of behavior (member functions or methods). Inheritance, as mentioned before, is when a class leverages code from another class.

Understanding Composition over Inheritance

ReactJS has a different philosophy where instead of using inheritance, it promotes composition. Composition is a way to combine simple functions or components to create more complex ones. Think of it like building a complex Lego structure. You don't inherit properties from other individual Lego blocks (inheritance), instead, you connect them together in various ways (composition) to build your structure.

However, there are cases where you might feel the need to use inheritance in ReactJS. But before we delve into how to do it, let's understand why ReactJS emphasizes on composition over inheritance.

Why Composition Over Inheritance?

ReactJS provides powerful ways to build a complex UI by composing components, and this is often simpler and more flexible than inheritance. You can think of your UI as a tree of components, where each component is responsible for rendering a small, reusable piece of your UI.

Imagine you're building a house. You wouldn't build a house by creating a super house that has all the features and then removing the ones you don't need for each house (inheritance). Instead, you'd build each house by putting together the specific features you need (composition).

Inheritance in ReactJS

Now, let's see how you can use inheritance in ReactJS, even though it's not the recommended approach. Let's assume we have a Person class and we want to create a Developer class that inherits from it.

class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    introduceSelf() {
        return `Hello, my name is ${this.name} and I am ${this.age} years old.`;
    }
}

class Developer extends Person {
    constructor(name, age, languages) {
        super(name, age);
        this.languages = languages;
    }

    introduceSelf() {
        return `${super.introduceSelf()} And I know ${this.languages.join(", ")}.`;
    }
}

In the example above, the Developer class is a child class that extends the Person class, which is the parent. The super() function calls the constructor of the parent class, thereby inheriting its properties.

Conclusion

While it's possible to use inheritance in ReactJS, it's important to remember that ReactJS was designed with composition in mind. Composition provides a more straightforward way to reuse code and create complex UIs, and it's the recommended approach in ReactJS.

That being said, understanding how inheritance works in JavaScript will help you become a more well-rounded developer, as it's a fundamental concept in object-oriented programming.

Remember, programming is often about trade-offs, and the choice between inheritance and composition is no different. Each has its own use-cases and strengths, and understanding them will enable you to make better design decisions in your code.