reactjs|June 23, 2020|2 min read

ReactJS - How to use conditionals in render JSX

TL;DR

Use ternary operators, logical && short-circuit evaluation, or extracted helper methods to conditionally render elements in React JSX based on component state or props.

ReactJS - How to use conditionals in render JSX

Introduction

In this post, I will show several ways to use conditionals while rendering html or component in jsx.

Consider we have a component, and based on a boolean flag we want to show or hide a paragraph

Below is a small component which receives props having book name and author name. Lets not concentrate on how the whole app works. We want to focus on conditional rendering.

import React, { Component } from 'react'

export default class Book extends Component {
    constructor(props) {
        super(props);
        this.state = {
            show: false
        };
    }

    toggleInfo = () => {
        this.setState({show: !this.state.show});
    }

    render() {
        const {book, author} = this.props.info;
        return (
            <article>
                <h3>book: {book}</h3>
                <h5>author: {author}</h5>
            </article>
        )
    }
}

Objective

Lets include a button in this component, and on click lets toggle show or hide a paragraph.

Method-1 - Using inline boolean condition

import React, { Component } from 'react'

export default class Book extends Component {
    constructor(props) {
        super(props);
        this.state = {
            show: false
        };
    }

    toggleInfo = () => {
        this.setState({show: !this.state.show});
    }

    render() {
        const {book, author} = this.props.info;
        return (
            <article>
                <h3>book: {book}</h3>
                <h5>author: {author}</h5>
                <button type="button" onClick={this.toggleInfo}>Toggle Paragraph</button>

                {
                    this.state.show && <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsam, nobis!</p>
                }
            </article>
        )
    }
}

toggleInfo is self explanatory. We are just toggling a boolean flag in component’s state. In render() method, we are checking that boolean flag and showing the paragraph if this flag is true. Simple enough.

Method-2 - Using Ternary Operator

import React, { Component } from 'react'

export default class Book extends Component {
    constructor(props) {
        super(props);
        this.state = {
            show: false
        };
    }

    toggleInfo = () => {
        this.setState({show: !this.state.show});
    }

    render() {
        const {book, author} = this.props.info;
        return (
            <article>
                <h3>book: {book}</h3>
                <h5>author: {author}</h5>
                <button type="button" onClick={this.toggleInfo}>Toggle Paragraph</button>

                {
                    this.state.show ? 
                    (<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsam, nobis!</p>)
                    : null
                }
            </article>
        )
    }
}

Rest of the code is same. Note the ternary operator which is quite easy to understand.

Method-3 - By using a function

We can define a method(function) in the component which will take this decision whether to show the paragraph or not.

import React, { Component } from 'react'

export default class Book extends Component {
    constructor(props) {
        super(props);
        this.state = {
            show: false
        };
    }

    toggleInfo = () => {
        this.setState({show: !this.state.show});
    }

    toShow = () => {
        if (this.state.show) {
            return <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsam, nobis!</p>;
        }
        else {
            return null;
        }
    }

    render() {
        const {book, author} = this.props.info;
        return (
            <article>
                <h3>book: {book}</h3>
                <h5>author: {author}</h5>
                <button type="button" onClick={this.toggleInfo}>Toggle Paragraph</button>

                {this.toShow()}
            </article>
        )
    }
}

These three methods are simple to use, and you can use anyone.

Note: If you are having confusion that I did not use bind on the extra function I defined. Notice that I’m using ES6 arrow function, not the traditional function keyword.

Related Posts

ReactJS - Understanding SetState Asynchronous Behavior and How to correctly use it

ReactJS - Understanding SetState Asynchronous Behavior and How to correctly use it

ReactJS setState is Asynchronous setState() method in ReactJS class components…

ReactJS - How to restrict data type for different kind of data

ReactJS - How to restrict data type for different kind of data

Introduction Javascript is not a strict type language. We can use a variable to…

ReactJS - How to create ReactJS components

ReactJS - How to create ReactJS components

Introduction In this post, we will talk about basic of how to create components…

ReactJS - Basic Form Handling and Form submission

ReactJS - Basic Form Handling and Form submission

Introduction Lets take a look at how forms are being handled in ReactJS. We will…

ReactJS - How to pass method to component and how to pass arguments to method

ReactJS - How to pass method to component and how to pass arguments to method

Introduction In the ReactJS project, you are having aa parent component and a…

ReactJS - 3 ways to Import components in ReactJS

ReactJS - 3 ways to Import components in ReactJS

Introduction In this post, we will discuss 3 different ways to import a…

Latest Posts

Staff Engineer Study Plan for MAANG Interviews — The Complete 12-Week Roadmap

Staff Engineer Study Plan for MAANG Interviews — The Complete 12-Week Roadmap

If you’re a Senior Engineer (L5) preparing for Staff (L6+) roles at MAANG…

XSS and CSRF Explained — The Complete Guide with Real Attack Examples and Defenses

XSS and CSRF Explained — The Complete Guide with Real Attack Examples and Defenses

XSS and CSRF have been in the OWASP Top 10 for over a decade. They’re among the…

OWASP Top 10 (2021) — Every Vulnerability Explained with Code

OWASP Top 10 (2021) — Every Vulnerability Explained with Code

The OWASP Top 10 is the industry standard for web application security risks. If…

HTTP Cookies Security — Everything Developers Get Wrong

HTTP Cookies Security — Everything Developers Get Wrong

Cookies are the single most important mechanism for web authentication. Every…

Format String Vulnerabilities — The Read-Write Primitive Hiding in printf()

Format String Vulnerabilities — The Read-Write Primitive Hiding in printf()

Format string vulnerabilities are unique in the exploit world. Most memory…

Buffer Overflow Attacks — How Memory Corruption Actually Works

Buffer Overflow Attacks — How Memory Corruption Actually Works

Buffer overflows are the oldest and most consequential vulnerability class in…