Fix Seeing “0” in Your JSX Code

By  on  

The early days of the web felt like the wild west when it came to coding practices -- just make it work. Then we became enlightened to better practices, separating HTML from CSS and JavaScript. Then came React and JSX, where we combine JavaScript, HTML, and even CSS with Styled Components -- what an elegant mess we've made!

Every once in a while part of that mess is me seeing 0 displaying in the output of my JSX code, and I'm reminded why: improper handling of variable typing, combined with using &&. Let me explain!

One of the popular patterns in JSX is:

<div>Some header</div>
{someValue && <div>Some header</div>}

The pattern makes sense but check out the difference in outputs between string and number types:

"0" && "Thing"
> "Thing"
0 && "Thing"
> 0

Note that a string value of 0 allows the second value to be returned, but a number typed 0 simply returns the 0. The best practice is always to cast the value to a Boolean in your JSX:

{Boolean(value) && ....}

Typescript and even PropTypes can help to catch these issues but even seasoned veterans sometimes hit these pain points.

Recent Features

  • By
    Introducing MooTools Templated

    One major problem with creating UI components with the MooTools JavaScript framework is that there isn't a great way of allowing customization of template and ease of node creation. As of today, there are two ways of creating: new Element Madness The first way to create UI-driven...

  • By
    5 More HTML5 APIs You Didn&#8217;t Know Existed

    The HTML5 revolution has provided us some awesome JavaScript and HTML APIs.  Some are APIs we knew we've needed for years, others are cutting edge mobile and desktop helpers.  Regardless of API strength or purpose, anything to help us better do our job is a...

Incredible Demos

  • By
    Duplicate the jQuery Homepage Tooltips Using MooTools

    The jQuery homepage has a pretty suave tooltip-like effect as seen below: Here's how to accomplish this same effect using MooTools. The XHTML The above XHTML was taken directly from the jQuery homepage -- no changes. The CSS The above CSS has been slightly modified to match the CSS rules already...

  • By
    CSS Kwicks

    One of the effects that made me excited about client side and JavaScript was the Kwicks effect.  Take a list of items and react to them accordingly when hovered.  Simple, sweet.  The effect was originally created with JavaScript but come five years later, our...

Discussion

  1. Cuong

    You also can use {!!value && .... }

  2. Marko

    I usually like to be more explicit with these checks to make them more clear, so in this case I would maybe go for this:

        {value == 0 && ...}
    

    Even though === strict equality usually is better and I prefer it, but for this case I would say it’s ok.

    But that !!value mentioned by Cuong is also really good approach. It can just trip up less experienced people.
    One pattern that I also avoid is using myArray.length && and I like to be explicit like myArray.length > 0 && since it makes it more obvious what is going on here. It also can avoid these subtle pitfalls.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!