Picture of Brian Love wearing black against a dark wall in Portland, OR.

Brian Love

Conditional Class Names in React

Efficiently apply class names conditionally in React.

tl;dr

You can easily apply class names conditionally in React by leveraging an array of values, then join() each value with a space deliminator:

<Link
  to="/course"
  className={['ui', 'button', !fixed && 'inverted', !!fixed && 'primary']
    .filter(c => !!c)
    .join(' ')}
>
  Launch Course
</Link>

How does it work?

This is because JavaScript conditionals are short-circuited when using the && (and) operator.

If the first conditional in the series of and conditionals is falsey, the remaining values in the conditional do not need to be checked, and the result is false. If the first conditional in the series of and conditionals is truthy, then in sequence each subsequent value must be checked to verify the complete truthiness of the statement, and the result is the final value.

This concept is sometimes referred to as a guard.

Gotchas

There is one thing to be aware of. The final value (or class name string in our case) must be evaluated as a truthy. What is meant by that, is when JavaScript coerces the value to a boolean, you should be aware of the instances in which values can be coerced to be false.

So, if the class name (or value) is coerced to false when it is:

And as a result, the value will not be included in the final list of class names.