React JSX Explained: Write HTML in JavaScript the Smart Way
Last updated 2 months, 2 weeks ago | 120 views 75 5

Introduction: Why JSX Matters in React
One of the key innovations of React is JSX (JavaScript XML)—a syntax extension that lets you write HTML-like code inside JavaScript. JSX makes your component structure easier to read and maintain by blending UI and logic seamlessly.
Before JSX, creating UIs with React.createElement()
was verbose and less intuitive. JSX simplifies this by letting developers write familiar HTML tags directly inside their JavaScript functions.
✅ JSX solves:
-
Mixing UI and behavior in a clean, readable way
-
Writing complex UIs declaratively
-
Avoiding
createElement()
verbosity
What is JSX in React?
JSX is a syntax extension for JavaScript that looks like HTML but is compiled into React.createElement()
calls behind the scenes.
const element = <h1>Hello, world!</h1>;
This gets compiled to:
const element = React.createElement('h1', null, 'Hello, world!');
JSX = JavaScript + XML
How JSX Works: Core Concepts
1. JSX Must Return a Single Parent Element
Incorrect:
return <h1>Title</h1>
<p>Description</p>; // ❌ Error
Correct:
return (
<div>
<h1>Title</h1>
<p>Description</p>
</div>
);
2. Embedding Expressions in JSX
You can embed any JavaScript expression using curly braces {}
.
const user = 'Alice';
return <h2>Hello, {user}!</h2>;
Valid expressions include:
-
Variables
-
Function calls
-
Operators
-
Conditional expressions
3. JSX Attributes Use camelCase
Instead of class
, use className
. Instead of onclick
, use onClick
.
<div className="container" onClick={handleClick}>Click me</div>
HTML Attribute | JSX Equivalent |
---|---|
class |
className |
for |
htmlFor |
onclick |
onClick |
4. Self-Closing Tags Are Required for Empty Elements
JSX requires tags like <img />
, <input />
, and <br />
to be self-closed.
<img src="logo.png" alt="Logo" /> // ✅
5. JSX Is Not a String or HTML
Even though it looks like HTML, JSX is not a string. It compiles into function calls and JavaScript objects.
JSX in Practice: Reusable Components
JSX is used to define UI components that return markup:
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
Then render it:
<Welcome name="React Developer" />
Full Functional Code Example
import React from 'react';
function UserCard({ name, age }) {
const isAdult = age >= 18;
return (
<div className="card">
<h2>{name}</h2>
<p>Age: {age}</p>
<p>Status: {isAdult ? 'Adult' : 'Minor'}</p>
</div>
);
}
function App() {
return (
<div>
<h1>JSX Demo</h1>
<UserCard name="Alice" age={25} />
<UserCard name="Bob" age={16} />
</div>
);
}
export default App;
Tips & Common Pitfalls
✅ Best Practices
-
Use fragments (
<> </>
) when you don't want extra wrapper elements. -
Format JSX using Prettier or ESLint plugins.
-
Break large JSX blocks into small reusable components.
-
Write pure functions for clean and maintainable JSX.
⚠️ Common Mistakes
-
❌ Forgetting
className
instead ofclass
-
❌ Returning multiple elements without a wrapper
-
❌ Treating JSX like HTML strings
-
❌ Using if statements directly inside JSX (use ternary or helper functions instead)
JSX Syntax Summary Table
Feature | Syntax Example | Notes |
---|---|---|
Basic tag | <div>Hello</div> |
Must be closed |
JavaScript expression | <h1>{name}</h1> |
Curly braces for JS |
Ternary conditionals | {isOnline ? 'Online' : 'Offline'} |
Avoid if/else inside JSX |
Fragments (no wrapper div) | <> <h1 /> <p /> </> |
Useful to prevent extra DOM |
Self-closing elements | <img /> , <input /> |
Required in JSX |
Props | <Button color="blue" size="small" /> |
Passed as object to component |
Conclusion: JSX is Where Logic Meets Markup
JSX is what makes React development intuitive and powerful. It brings together the structure of HTML with the flexibility of JavaScript, enabling developers to build UI components declaratively.
Key Takeaway: Mastering JSX is essential for writing clean, readable, and maintainable React applications. Treat JSX as JavaScript—not as HTML—and you'll write better React code.