JSX Rules in React: Complete Easy Guide
JSX rules in React Explained
JSX rules in React define how developers write structured UI components using JavaScript XML syntax. These rules ensure that React applications remain clean, readable, and error-free while rendering dynamic interfaces.JSX rules in React define how developers write structured UI components using JavaScript XML syntax. These rules ensure that React applications remain clean, readable, and error-free while rendering dynamic interfaces.JSX (JavaScript XML) is a syntax extension for JavaScript commonly used with React to describe user interfaces. It resembles HTML but must adhere to strict syntactical rules because it is transpiled into regular JavaScript function calls (React.createElement). The following rules are essential for writing correct, maintainable JSX in any academic or production codebase. Each rule is accompanied by wrong and correct examples to illustrate common pitfalls.

Download Slide :The_7_Rules_of_JSX
1. Single Root Element
Rule: A JSX expression must have one parent element. Adjacent elements at the top level are not permitted. Use a parent <div> or an empty fragment <>...</>.
| Wrong | Correct |
|---|---|
|
|
Explanation:
The fragment shorthand <>...</> avoids adding unnecessary DOM nodes. Alternatively, <React.Fragment> can be used if keyed fragments are required.
2. Self-Closing Tags
Rule: Tags that have no children must be explicitly self-closed. This applies to native HTML elements (e.g., <img>, <br>) and custom components.
| Wrong | Correct |
|---|---|
<img src='x'> |
<img src='' /> |
Explanation:
While HTML allows unclosed void elements, JSX follows XML strictness. Forgetting the closing slash will cause a syntax error at compilation.
3. class → className
Rule: The HTML class attribute is written as className in JSX because class is a reserved keyword in JavaScript.
| Wrong | Correct |
|---|---|
<div class="box"></div> |
<div className="box"></div> |
Explanation:
When the JSX is transpiled, className becomes the class property of the corresponding DOM element. Using class directly would conflict with the JavaScript class declaration syntax.
4. for → htmlFor
Rule: The HTML for attribute (used on <label>) is written as htmlFor because for is a reserved keyword in JavaScript (used in loops).
| Wrong | Correct |
|---|---|
for='email' |
htmlFor='email' |
Explanation:
This transformation follows the same logic as class → className. It maps the JSX attribute to the native DOM property htmlFor while avoiding JavaScript keyword conflicts.
5. Event Names (camelCase)
Rule: All event handler attributes are written in camelCase, following the JavaScript DOM API convention rather than the lowercase HTML attribute style.
| Wrong | Correct |
|---|---|
onclick |
onClick |
onchange |
onChange |
onmouseover |
onMouseOver |
Explanation:
JSX uses the synthetic event system of React, which expects event names like onClick, onSubmit, etc. The all-lowercase onclick is not recognized and will result in a warning or a silent failure.
6. Comments
Rule: Comments inside JSX must be wrapped in curly braces and use the JavaScript multi-line comment syntax /* */. Single-line comments // cannot be used directly inside JSX (they would be rendered as text or cause an error).
| Wrong | Correct |
|---|---|
// comment |
{/* comment */} |
Explanation:
JSX treats text between tags as literal children. To insert a developer-only comment that does not appear in the rendered output, embed the comment inside an expression using {/* ... */}.
7. Inline Styles
Rule: The style attribute accepts a JavaScript object with camelCased CSS properties, not a string. The outer curly braces denote a JSX expression, and the inner ones denote a JavaScript object literal.
| Wrong | Correct |
|---|---|
style='color:red' |
style={{ color: 'red' }} |
Explanation:
The object syntax allows dynamic styles and mirrors the DOM HTMLElement.style API. CSS property names are camelCased: background-color becomes backgroundColor, font-size becomes fontSize. Values must be strings (or numbers for unitless properties). A common mistake is forgetting the double braces.
Example
The following component integrates all the rules above and can serve as a practical reference:
function ContactForm() { const inputStyle = { padding: '8px', border: '1px solid #ccc', borderRadius: '4px', }; return ( // Single root element using a fragment <> {/* This is a JSX comment */} <h2 className="form-title">Contact Us</h2> <form> <label htmlFor="email">Email:</label> <input type="email" id="email" name="email" style={inputStyle} // camelCase event handler onChange={(e) => console.log(e.target.value)} /> <br /> <button type="submit" onClick={() => alert('Submitted')}> Send </button> </form> </> ); }
Conclusion
Adhering to these JSX rules ensures code clarity, prevents compile-time errors, and aligns with React’s internal transformations. By consistently applying these conventions, both academic tutorials and industrial applications become more robust and maintainable.
FAQs
Q: What are JSX rules in React?
A: JSX rules in React are guidelines that define how JavaScript XML is written to create UI components in React applications.
Q: Why are JSX rules important?
A: They ensure code consistency, prevent errors, and make React components easier to read and maintain.
Learn more about React from the official documentation:
https://react.dev/learn
