Why React uses `className` over `class` attribute?
Assesses fundamental understanding of React conventions, runtime behavior, and memory/performance considerations.
Hiring managers look for precision, avoidance of ambiguous jargon, and ability to explain trade-offs under real production conditions.
React uses className instead of class because of a JavaScript naming conflict with the class keyword.
classis a reserved keyword in JavaScript
In JavaScript, class is used to define ES6 classes:
class Person {
constructor(name) {
this.name = name;
}
}
If you try to use class as a variable or property name, it will throw a syntax error. Since JSX is just JavaScript with XML-like syntax, using class directly in JSX would break the parser.
- JSX Is JavaScript
When you write JSX like this:
<div class="btn">Click</div>
It will be compiled to:
React.createElement('div', { class: 'btn' }, 'Click');
But class is invalid in this object literal context (since it clashes with the JS keyword), hence React instead uses className.
<div className="btn">Click</div>
which compiles to:
React.createElement('div', { className: 'btn' }, 'Click');
React then translates className to class in the final HTML DOM.
- Aligns with DOM APIs
In vanilla JavaScript, you interact with element classes using:
element.className = 'my-class';
React follows this convention, staying consistent with the DOM API's property name rather than HTML’s attribute.
Candidate Response Strategy & Interview Tips
- Start with a concise one-sentence summary: Deliver a direct, confident answer first before expanding into nuances.
- Demonstrate real-world trade-offs: Discuss where this approach excels and when you would avoid it in production systems.
- Discuss complexity & edge cases: Proactively explain time/space complexity or boundary conditions (null values, scale limits).
- Prepare for interviewer follow-ups: Technical hiring panels frequently probe deeper into concurrency, backward compatibility, or alternative libraries.