Skip to main content

Conditional Rendering

Your components often need to display different content based on conditions. In React, you can conditionally render JSX using JavaScript syntax like if statements, &&, and ternary operators.

Conditionally Returning JSX

The simplest way to conditionally render is to return early:

Returning Nothing

Return null to render nothing:
Important: Returning null, undefined, true, or false from a component renders nothing. However, these values behave differently inside JSX expressions.

Ternary Operator

Use the ternary operator (? :) for inline conditional rendering:

Nested Ternaries

Readability tip: Deeply nested ternaries can be hard to read. Consider using if statements or extracting logic into a function if you have more than 2 levels.

Logical AND Operator (&&)

Use && to render something only when a condition is true:

How && Works in JSX

Gotcha: The left side of && is rendered if it’s a falsy number like 0. Always use boolean conditions:
  • ✅ isReady && <Component />
  • ✅ count > 0 && <Component />
  • ❌ count && <Component /> (renders 0 when count is 0)

If/Else in JSX

You can’t use if/else directly in JSX, but you can use it before the return:

Using IIFE (Immediately Invoked Function Expression)

Multiple Conditions

Handle complex conditional logic with multiple conditions:

Conditional Attributes

Conditionally set element attributes:

Conditional Class Names

Extracting Conditional Logic

For complex conditions, extract into helper functions:

Conditional Rendering with State

Combine conditional rendering with state for interactive UIs:

Complete Authentication Example

Pattern Comparison

Choose the right pattern for your use case:

Best Practices

Guidelines for conditional rendering:
  • Use early returns for component-level conditions
  • Use && for simple show/hide logic (with boolean conditions)
  • Use ternary for either/or scenarios
  • Extract complex conditions into helper functions
  • Avoid deeply nested ternaries
  • Be careful with falsy values (especially 0) with &&

Next Steps

Now that you can conditionally render UI, learn how to render lists of data efficiently.