Conditional Class Rendering in React using CLSX
What is CLSX and when do we need to use it?
I mentioned about clsx
in my previous blog post and I needed to write a new one explaining it more. Say goodbye to not-so-readable multiple-class renderings like this!
<div className={`${classes.foo} ${classes.bar} ${classes.baz}`} />
Ans say hello to clx
. — Even though it was here for quite some time, I just discovered it :)
What is CLSX?
A tiny (228B) utility for constructing
className
strings conditionally.
Also serves as a faster & smaller drop-in replacement for theclassnames
module.
This is the definition we find in the npm package documentation. Basically, it lets you conditionally set react class names (and also enables you to pass multiple class names — obviously).
How to install
You can easily install this to your project using npm
like this.
$ npm install --save clsx
Usage
Let me walk you through a simple example where we can use clsx
.
So as you can see in this example, there is this presidency
variable where we set the class name list according to some booleans. Let me explain line by line why and what it does,
- We use
clxs
to pass class names into the package. clsx() function from the package of the same name is a JavaScript utility used to set up conditions for setting the value of the className attribute. It accepts an unlimited number of arguments not limited to one specific type. - We should pass the class list as an array. So
ranil
,mahinda
,namal
,gotabaya
all are style classes. We need a way to pass one or more of those depending on some external booleans right? we set theranil
class totrue
; basically, it says that theranil
class will be executed always no matter what. - Unlike
ranil
class,mahinda
class will only be set when theisRanilNotPresident
istrue
. - Same as
mahinda
, bothgotabaya
andnamal
classes have their own conditions. So depending on their value, the classes will be set. gotabaya
is set when theisRanilNotPresident
is true and alsobeforeAragalaya
is true.
This is not the only way to set the conditions, There are many supported syntaxes that you can check in the official docs.
I think this will help you to code a little better and be a bit more reader-friendly. Thanks for reading and will catch you in the next one. Peace!