codingstuff.io
ExploreTutorialsProblemsCS Subjects
Get Started
ExploreTutorialsProblemsCS Subjects
Get Started
codingstuff.io

Master the art of building software through interactive tutorials, real-world problems, and guided projects.

Pune, Maharashtra, India

codingstuffmail@gmail.com

Product

  • Explore
  • Tutorials
  • Problems
  • CS Subjects

Company

  • About
  • Contact
  • Privacy Policy
  • Terms & Conditions
  • Sitemap

© 2026 codingstuff.io. All rights reserved.

Built with ❤️ for developers everywhere

/
/
All Tutorials
⚛️

React.js

14 / 61 topics
10Lifecycle Methods Overview11ComponentDidMount Lifecycle Method12ComponentDidUpdate Lifecycle Method13ComponentWillUnmount Lifecycle Method14Conditional Rendering in React15Rendering Lists and Using Keys16Handling Forms in React17Lifting State Up
Tutorials/React.js/Conditional Rendering in React
⚛️React.js

Conditional Rendering in React

Updated 2026-04-20
3 min read

Introduction

Conditional rendering is a fundamental concept in React that allows developers to control what components are rendered based on certain conditions. This technique is essential for creating dynamic user interfaces that respond to data changes, user interactions, or other factors.

In this tutorial, we will explore various methods of conditional rendering in React, including using if-else statements, ternary operators, logical && operator, and the switch statement. We'll also discuss best practices and provide real-world examples to illustrate how these techniques can be effectively used in your React applications.

Basic Conditional Rendering

Using If-Else Statements

The most straightforward way to conditionally render components is by using if-else statements within the render method of a class component or the return statement of a functional component.

// Class Component Example
class Greeting extends React.Component {
  render() {
    const isLoggedIn = this.props.isLoggedIn;
    let greeting;

    if (isLoggedIn) {
      greeting = <h1>Welcome back!</h1>;
    } else {
      greeting = <h1>Please log in.</h1>;
    }

    return (
      <div>
        {greeting}
      </div>
    );
  }
}

// Functional Component Example
function Greeting({ isLoggedIn }) {
  let greeting;

  if (isLoggedIn) {
    greeting = <h1>Welcome back!</h1>;
  } else {
    greeting = <h1>Please log in.</h1>;
  }

  return (
    <div>
      {greeting}
    </div>
  );
}

Using Ternary Operators

Ternary operators provide a more concise way to conditionally render components. They are often preferred for simple conditional rendering logic.

// Class Component Example
class Greeting extends React.Component {
  render() {
    const isLoggedIn = this.props.isLoggedIn;

    return (
      <div>
        {isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please log in.</h1>}
      </div>
    );
  }
}

// Functional Component Example
function Greeting({ isLoggedIn }) {
  return (
    <div>
      {isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please log in.</h1>}
    </div>
  );
}

Using Logical && Operator

The logical && operator can be used to conditionally render a component only if a certain condition is true. This approach is useful for rendering elements that should appear only under specific conditions without needing an else clause.

// Class Component Example
class Greeting extends React.Component {
  render() {
    const isLoggedIn = this.props.isLoggedIn;

    return (
      <div>
        {isLoggedIn && <h1>Welcome back!</h1>}
      </div>
    );
  }
}

// Functional Component Example
function Greeting({ isLoggedIn }) {
  return (
    <div>
      {isLoggedIn && <h1>Welcome back!</h1>}
    </div>
  );
}

Using Switch Statement

The switch statement can be used for more complex conditional logic, especially when dealing with multiple conditions.

// Class Component Example
class Greeting extends React.Component {
  render() {
    const userRole = this.props.userRole;

    let greeting;
    switch (userRole) {
      case 'admin':
        greeting = <h1>Welcome, Admin!</h1>;
        break;
      case 'editor':
        greeting = <h1>Welcome, Editor!</h1>;
        break;
      default:
        greeting = <h1>Welcome, Guest!</h1>;
    }

    return (
      <div>
        {greeting}
      </div>
    );
  }
}

// Functional Component Example
function Greeting({ userRole }) {
  let greeting;

  switch (userRole) {
    case 'admin':
      greeting = <h1>Welcome, Admin!</h1>;
      break;
    case 'editor':
      greeting = <h1>Welcome, Editor!</h1>;
      break;
    default:
      greeting = <h1>Welcome, Guest!</h1>;
  }

  return (
    <div>
      {greeting}
    </div>
  );
}

Best Practices

Keep Logic Simple

While conditional rendering is powerful, it's important to keep the logic as simple and readable as possible. Avoid nesting multiple ternary operators or complex if-else statements that can make your code difficult to understand.

// Bad Practice
function Greeting({ isLoggedIn, userRole }) {
  return (
    <div>
      {isLoggedIn ? 
        (userRole === 'admin' ? <h1>Welcome, Admin!</h1> : <h1>Welcome back!</h1>) 
        : <h1>Please log in.</h1>}
    </div>
  );
}

// Good Practice
function Greeting({ isLoggedIn, userRole }) {
  if (!isLoggedIn) return <h1>Please log in.</h1>;

  switch (userRole) {
    case 'admin':
      return <h1>Welcome, Admin!</h1>;
    default:
      return <h1>Welcome back!</h1>;
  }
}

Use Helper Functions

For complex conditional logic, consider extracting the logic into a helper function. This can improve readability and make your code more maintainable.

function getGreeting(isLoggedIn, userRole) {
  if (!isLoggedIn) return <h1>Please log in.</h1>;

  switch (userRole) {
    case 'admin':
      return <h1>Welcome, Admin!</h1>;
    default:
      return <h1>Welcome back!</h1>;
  }
}

function Greeting({ isLoggedIn, userRole }) {
  return (
    <div>
      {getGreeting(isLoggedIn, userRole)}
    </div>
  );
}

Avoid Inline Conditions

While inline conditions can be convenient, they can clutter your JSX and make it harder to read. It's generally better to separate the conditional logic from the JSX.

// Bad Practice
function Greeting({ isLoggedIn }) {
  return (
    <div>
      {isLoggedIn ? 
        <div>
          <h1>Welcome back!</h1>
          <p>Enjoy your session.</p>
        </div> 
        : <h1>Please log in.</h1>}
    </div>
  );
}

// Good Practice
function WelcomeMessage() {
  return (
    <div>
      <h1>Welcome back!</h1>
      <p>Enjoy your session.</p>
    </div>
  );
}

function Greeting({ isLoggedIn }) {
  return (
    <div>
      {isLoggedIn ? <WelcomeMessage /> : <h1>Please log in.</h1>}
    </div>
  );
}

Real-World Example

Let's consider a real-world example where conditional rendering is used to display different user profiles based on their roles.

import React from 'react';

function UserProfile({ user }) {
  if (!user) return <p>Loading...</p>;

  const { name, role } = user;

  let profileContent;
  switch (role) {
    case 'admin':
      profileContent = (
        <div>
          <h2>Admin Profile</h2>
          <p>Name: {name}</p>
          <p>Role: Admin</p>
          <button>Manage Users</button>
        </div>
      );
      break;
    case 'editor':
      profileContent = (
        <div>
          <h2>Editor Profile</h2>
          <p>Name: {name}</p>
          <p>Role: Editor</p>
          <button>Edit Content</button>
        </div>
      );
      break;
    default:
      profileContent = (
        <div>
          <h2>User Profile</h2>
          <p>Name: {name}</p>
          <p>Role: User</p>
        </div>
      );
  }

  return (
    <div>
      {profileContent}
    </div>
  );
}

export default UserProfile;

In this example, the UserProfile component conditionally renders different content based on the user's role. This approach ensures that each user sees relevant information and actions tailored to their role.

Conclusion

Conditional rendering is a powerful feature in React that allows developers to create dynamic and responsive user interfaces. By understanding various methods of conditional rendering and following best practices, you can write cleaner, more maintainable code. Whether you're using if-else statements, ternary operators, logical && operator, or the switch statement, always prioritize readability and simplicity in your code.

In the next section of our React.js course, we will delve into advanced topics such as state management and lifecycle methods. Stay tuned!


PreviousComponentWillUnmount Lifecycle MethodNext Rendering Lists and Using Keys

Recommended Gear

ComponentWillUnmount Lifecycle MethodRendering Lists and Using Keys