Introduction to JSX
function ComponentName() {
return (
<div className="class-name" onClick={handler}>
<child>content</child>
</div>
);
}
What JSX Looks Like
JSX is a syntax extension that lets you write HTML-like tags directly inside JavaScript. Under the hood, each JSX tag compiles down to a React.createElement() call -- JSX is just a friendlier way to write that.
Example: What JSX Looks Like
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
function Hello() {
return <p>This is JSX -- it looks like HTML but is JavaScript.</p>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<Hello />);
</script>
</body>
</html>
A Single Root Element
A component's JSX must return exactly one top-level element -- you can't return two sibling tags side by side without wrapping them in a parent.
Example: A Single Root Element
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
function TwoLines() {
return (
<div>
<p>First line</p>
<p>Second line</p>
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<TwoLines />);
</script>
</body>
</html>
JSX Attributes Use camelCase
HTML attributes like onclick and tabindex become onClick and tabIndex in JSX, following JavaScript's camelCase convention instead of HTML's lowercase convention.
Example: JSX Attributes Use camelCase
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
function ClickNote() {
return <button onClick={() => alert('Clicked!')}>Click me</button>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<ClickNote />);
</script>
</body>
</html>
- Writing JSX outside of a function that returns it, expecting it to display automatically.
- Forgetting JSX must have exactly one root element wrapping everything returned.
- Using
classinstead ofclassNamefor CSS classes, sinceclassis a reserved word in JavaScript.
- JSX is a syntax extension that lets you write HTML-like markup inside JavaScript.
- It gets compiled (via Babel) into regular JavaScript function calls.
- JSX expressions must return a single root element.
- JSX uses camelCase attribute names like
classNameandonClick.
JSX itself never runs directly in a browser -- it must be compiled first, either at build time (Babel/Webpack/Vite) or via the Babel standalone CDN for quick demos.
Chapter Quiz — Complete all 10 topics to unlock
0/10 topics done
Complete these topics first: