Posted on October 19 2021
At the end of this blog article, you will know how to dynamically bind classes to an element like Vue.js.
In Vue it is pretty easy to add classes based on a specific condition. You simply need to use data binding and specify an object with the classes as a key and the condition as the value.
<div :class="{ 'text-red-500': true }"></div>
This will become really handy if you want to add classes based on multiple conditions. However, in React, it is not that simple.
Now that you know how to use dynamic class binding with an object in Vue, we will look at the specific implementation in React.
You might be familiar with conditional binding using a ternary operator.
<div class={`bg-gray-100 ${true ? 'text-red-500' : ''`}></div>
With the help of this ternary operator, we will check the condition and then add the string
after the ?
.
Whenever this condition is false, it will add the string
after the :
.
However, this syntax will become really messy when you want to add more conditions.
A simple solution would be this little function:
const classes = (
dynamic: Record<string, boolean>,
classes: string = '',
): string => {
return Object.entries(dynamic) // 1.
.filter((entry) => entry[1]) // 2.
.map((entry) => entry[0]) // 3.
.join(' ') // 4.
.concat(' ') // 5.
.concat(classes); // 5.
};
Here is a simple step by step explanation of this function:
Object.entries
(entry[0]
are the classes in a string and entry[1]
is the condition)You would use this function to declare all the conditional classes in one object as the first argument and the permanent classes as the second argument.
const colorClasses = classes(
{
'text-green-500 bg-green-500': color === 'green',
'text-red-500 bg-red-500': color === 'red',
'text-yellow-500 bg-yellow-500': color === 'yellow',
},
'rounded-xl cursor-pointer',
);
return (
<div className={colorClasses}></div>
);
And this is all you need to add beautiful dynamic class binding to your React components. This small function lets you add conditional class binding to every single element in your DOM.
Next Article
Everything about Go ConcurrencyComing Soon article about everything you need to know about go concurrency.
Previous Article
Year 2020 ReviewThis is my personal review of the year 2020. A lot has happened, and a lot will happen in 2021 (hopefully).
© 2021 Florian Woelki