Conditional ClassNames
One of the most common ways to control element styles in React is to apply style classes based on some condition. For example you might need to apply a class named "active" to a open a menu or provide visual feedback on a button.
Here are two methods for implementing conditional ClassNames on a <button/> element in React.
Using a Ternary Operator
This is the simplest method because it does not require adding an npm package.
Here is a React component which has an active prop and returns a <button/> element with the class theButton:
import React from 'react';const Button = ({ active }) => {return <button className='theButton' />;};export default Button;
Now here it is using a ternary statement to add the class active when the prop active is true:
import React from 'react';const Button = ({ active }) => {return <button className={`theButton ${active ? 'active' : ''}`} />;};export default Button;
The ternary statement is placed inside of a template literal and wrapped with ${} so it returns either active or "" when evaluated. This method could be used to add any number of classes to an element, the following example adds a disabled class based on a disabled prop.
import React from 'react';const Button = ({ disabled }) => {return (<buttonclassName={`theButton ${active ? 'active' : ''} ${disabled ? 'disabled' : ''}`}/>);};export default Button;
Using the classnames library
classnames is an npm package which makes writing conditional classes in React more concise.Here is the last example re-written using the classnames library:
import React from 'react';import cx from 'classnames';const Button = ({ disabled }) => {return (<buttonclassName={cx('theButton', { active: active, disabled: disabled })}/>);};export default Button;