Introduction to JSX - React's HTML in JavaScript!

Learn everything about JSX! What it is, how it works, syntax rules, and how to use it in React!

Introduction

JSX looks like HTML in your JavaScript - and that's exactly what it is! It's one of React's best features, and we're going to master it!

What You Will Learn

  • What JSX is and why React uses it
  • JSX syntax rules
  • Embedding expressions in JSX
  • JSX vs HTML differences

Prerequisites

What is JSX?

JSX stands for JavaScript XML - it's a syntax extension for JavaScript that lets you write HTML-like code in your JS files!

// This is JSX!
const element = <h1>Hello, JSX!</h1>;

But browsers don't understand JSX!

Don't worry! Tools like Vite and Babel transform JSX into regular JavaScript calls!

Your JSX:

<h1 className="greeting">Hello!</h1>

Transforms to:

React.createElement('h1', { className: 'greeting' }, 'Hello!');

So JSX is just syntactic sugar - it makes your code easier to read!

Embedding Expressions in JSX

You can put any JavaScript expression inside curly braces {} in JSX!

const name = 'React';
const element = <h1>Hello, {name}!</h1>; // Hello, React!

function formatName(user) {
  return `${user.firstName} ${user.lastName}`;
}

const user = { firstName: 'John', lastName: 'Doe' };
const element = <h1>Hello, {formatName(user)}!</h1>;

You can even put other JSX inside expressions!

function getGreeting(user) {
  if (user) {
    return <h1>Hello, {formatName(user)}!</h1>;
  }
  return <h1>Hello, Stranger!</h1>;
}

JSX is an Expression Too!

You can assign JSX to variables, return it from functions, pass it as arguments - anything you can do with a normal JS expression!

function Greeting({ isLoggedIn }) {
  if (isLoggedIn) {
    return <h1>Welcome back!</h1>;
  }
  return <h1>Please log in.</h1>;
}

JSX Attributes

Some attributes are different from HTML!

Use className Instead of class

Because class is a reserved word in JavaScript!

// Wrong!
<div class="container"></div>

// Right!
<div className="container"></div>

camelCase Attribute Names

HTML attributes become camelCase in JSX!

// HTML
<div tabindex="1" onclick="handleClick()"></div>

// JSX
<div tabIndex="1" onClick={handleClick}></div>

JSX Children

You can nest elements inside JSX just like HTML!

const element = (
  <div>
    <h1>Hello!</h1>
    <p>This is a paragraph.</p>
  </div>
);

If it's multi-line, wrap it in parentheses to avoid automatic semicolon insertion issues!

Self-Closing Tags

If an element doesn't have children, you must close it with />!

<img src="logo.png" />
<br />
<input type="text" />

JSX Prevents Injection Attacks

React automatically escapes any values in JSX, so XSS attacks are prevented!

const userInput = '<script>alert("Bad!")</script>';
const element = <h1>{userInput}</h1>; // Safe! React will escape it!

JSX Represents Objects

Babel compiles JSX to React.createElement calls:

// JSX
const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);

// Compiled to
const element = React.createElement(
  'h1',
  { className: 'greeting' },
  'Hello, world!'
);

// Which creates an object like:
const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world!'
  }
};

These objects are called React elements - they describe what should appear on the screen!

Best Practices with JSX

  1. Use parentheses for multi-line JSX: Prevents ASI issues!
  2. Indent properly: Makes it readable!
  3. One element per line: Easy to read!
  4. Use self-closing tags: When appropriate!
  5. Use meaningful class names: Not just div1, div2!

Common Mistakes

  1. Using class instead of className: Very common!
  2. Forgetting curly braces around expressions: {variable}!
  3. Not closing tags: Always close them!
  4. Returning multiple elements without a wrapper: Use a fragment!

Summary

JSX is a syntax extension that lets you write HTML in your JavaScript! It gets compiled to React.createElement calls, and it's safe, readable, and one of React's best features!

Related Articles

Previous Tutorial

← First React App

Next Tutorial

Let's learn all JSX rules! → JSX Syntax Rules