DEV Community

TenE
TenE

Posted on

Components in React: Functional vs. Class Components

What are React Components?

React components are reusable building blocks for UI. They allow you to break down a UI into smaller, independent pieces.


Types of Components in React

React has two types of components:

  1. Functional Components (Modern, recommended)
  2. Class Components (Older)

1. Functional Components (Recommended)

Functional components are JavaScript functions that return JSX.

Example of a Functional Component:

function Greeting() {
  return <h1>Hello, React!</h1>;
}

export default Greeting;
Enter fullscreen mode Exit fullscreen mode

Why Use Functional Components?

  • Simpler and easier to read
  • No need for this keyword
  • Hooks (useState, useEffect) work only in functional components

2. Class Components (Older Method)

Class components use ES6 classes and render() to return JSX.

Example of a Class Component:

import React, { Component } from "react";

class Greeting extends Component {
  render() {
    return <h1>Hello, React!</h1>;
  }
}

export default Greeting;
Enter fullscreen mode Exit fullscreen mode

Why Avoid Class Components?

  • More complex syntax
  • this keyword can be confusing
  • Cannot use hooks like useState directly

State in Components

State in Functional Components (Using useState)

import { useState } from "react";

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increase</button>
    </div>
  );
}

export default Counter;
Enter fullscreen mode Exit fullscreen mode

State in Class Components (Using this.state)

import React, { Component } from "react";

class Counter extends Component {
  constructor() {
    super();
    this.state = { count: 0 };
  }

  increaseCount = () => {
    this.setState({ count: this.state.count + 1 });
  };

  render() {
    return (
      <div>
        <p>Count: {this.state.count}</p>
        <button onClick={this.increaseCount}>Increase</button>
      </div>
    );
  }
}

export default Counter;
Enter fullscreen mode Exit fullscreen mode

Functional components with hooks (useState) are shorter and cleaner!


Props in Components

Using Props in Functional Components

function Welcome(props) {
  return <h1>Hello, {props.name}!</h1>;
}

// Usage
<Welcome name="Alice" />;
Enter fullscreen mode Exit fullscreen mode

Using Props in Class Components

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}!</h1>;
  }
}

// Usage
<Welcome name="Alice" />;
Enter fullscreen mode Exit fullscreen mode

Functional vs. Class Components: Comparison

Feature Functional Components Class Components
Syntax Simplicity Simple & clean More complex
Performance Faster Slightly slower
this Keyword Not required Required
State Management useState hook this.state
Lifecycle Methods useEffect hook componentDidMount, etc.
Recommended? Yes No (legacy)

Conclusion

  • Use functional components for better performance and readability.
  • Functional components support React Hooks (useState, useEffect).
  • Class components are outdated and should be avoided unless working with legacy code.

Top comments (0)