Bird
Raised Fist0
Reactframework~20 mins

JSX vs HTML differences in React - Practice Questions

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
JSX Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
JSX attribute naming difference
What will be the rendered output of this React component regarding the attribute on the <input> element?
React
function MyInput() {
  return <input className="my-class" />;
}
AThe input will have no class because 'class' is invalid in JSX.
BThe input will have an attribute 'class' but React will warn about it.
CThe input will have a CSS class named 'my-class'.
DThe input will throw a syntax error because 'class' is not allowed.
Attempts:
2 left
💡 Hint
Remember that 'class' is a reserved keyword in JavaScript.
📝 Syntax
intermediate
2:00remaining
JSX self-closing tags requirement
Which option correctly writes the <img> element in JSX?
React
function Image() {
  return <img src="logo.png" />;
}
AChange to <img src="logo.png" />
BChange to <img src="logo.png"></img> (no change needed)
CChange to <img src="logo.png">
DChange to <img src="logo.png" />;</img>
Attempts:
2 left
💡 Hint
Think about how void elements like <img> should be handled in JSX.
🔧 Debug
advanced
2:00remaining
Why does this JSX code cause an error?
Consider this React component code. Why does the event handler not work?
React
function Button() {
  return <button onClick={() => alert('Clicked!')}>Click me</button>;
}
ABecause the button element must be self-closing in JSX.
BBecause alert is not allowed inside JSX event handlers.
CBecause arrow functions cannot be used inside JSX attributes.
DBecause JSX uses camelCase for event handlers, it should be onClick, not onclick.
Attempts:
2 left
💡 Hint
Check the casing of event handler attributes in JSX.
❓ state_output
advanced
2:00remaining
JSX expression evaluation inside attributes
What will be the value of the alt attribute in the rendered <img> element?
React
function Logo() {
  const name = 'React';
  return <img src="logo.png" alt={name + ' Logo'} />;
}
AThe alt attribute will be 'React Logo'.
BThe alt attribute will be '{name + ' Logo'}' as a string literal.
CThe alt attribute will be empty because expressions are not allowed.
DThe code will cause a syntax error due to string concatenation.
Attempts:
2 left
💡 Hint
Remember how JSX handles JavaScript expressions inside curly braces.
🧠 Conceptual
expert
3:00remaining
Why does JSX use 'htmlFor' instead of 'for' in labels?
In JSX, the <label> element uses htmlFor instead of the HTML attribute for. Why is this change necessary?
ABecause 'for' is deprecated in HTML5 and replaced by 'htmlFor'.
BBecause 'for' is a reserved keyword in JavaScript, so JSX uses 'htmlFor' to avoid conflicts.
CBecause React automatically converts 'for' to 'htmlFor' internally.
DBecause 'htmlFor' is the standard attribute in HTML, not 'for'.
Attempts:
2 left
💡 Hint
Think about JavaScript language rules and how JSX is JavaScript syntax.

Practice

(1/5)
1. Which attribute should you use in JSX to add CSS classes to an element?
easy
A. cssClass
B. class
C. className
D. styleClass

Solution

  1. Step 1: Recall JSX attribute rules

    In JSX, the HTML attribute class is replaced by className because class is a reserved word in JavaScript.
  2. Step 2: Identify correct attribute for CSS classes

    Therefore, to add CSS classes in JSX, you must use className.
  3. Final Answer:

    className -> Option C
  4. Quick Check:

    JSX uses className, not class [OK]
Hint: Remember: JSX uses className, not class for CSS classes [OK]
Common Mistakes:
  • Using 'class' instead of 'className' causes errors
  • Confusing 'className' with 'cssClass'
  • Trying to use 'styleClass' which doesn't exist
2. Which of the following is the correct way to write a label with a 'for' attribute in JSX?
easy
A. Name
B. Name
C. Name
D. Name

Solution

  1. Step 1: Understand JSX attribute naming

    In JSX, the HTML attribute for is replaced by htmlFor because for is a reserved word in JavaScript.
  2. Step 2: Check correct casing and spelling

    The correct attribute is htmlFor with capital F, so <label htmlFor="inputId">Name</label> is correct.
  3. Final Answer:

    <label htmlFor="inputId">Name</label> -> Option A
  4. Quick Check:

    Use htmlFor, not for in JSX labels [OK]
Hint: Use htmlFor (camelCase) instead of for in JSX labels [OK]
Common Mistakes:
  • Using 'for' attribute directly causes syntax errors
  • Writing 'htmlfor' with lowercase f is incorrect
  • Using non-existent attributes like 'forId'
3. What will be the rendered output of this JSX code?
const element = <input type="checkbox" checked="true" />;
ReactDOM.render(element, document.getElementById('root'));
medium
A. A checkbox input with checked attribute as string
B. A checked checkbox input
C. Syntax error due to checked attribute value
D. An unchecked checkbox input

Solution

  1. Step 1: Analyze checked attribute in JSX

    In JSX, checked="true" without curly braces sets the prop to the string "true".
  2. Step 2: Understand rendering of boolean attributes

    React renders <input type="checkbox" checked="true" />. Browsers treat the presence of the checked attribute (any non-empty value) as checked for uncontrolled checkboxes.
  3. Final Answer:

    A checked checkbox input -> Option B
  4. Quick Check:

    Attribute presence checks uncontrolled checkbox [OK]
Hint: checked="true" renders checked checkbox (attribute presence) [OK]
Common Mistakes:
  • Thinking checked="true" leaves checkbox unchecked
  • Expecting string value to cause syntax error
  • Confusing uncontrolled render with controlled components
4. Identify the error in this JSX snippet:
const element = <div class="container">Hello</div>;
medium
A. Using class instead of className
B. Using double quotes instead of single quotes
C. Missing closing tag for div
D. Using semicolon inside JSX

Solution

  1. Step 1: Check attribute names in JSX

    JSX does not use the HTML attribute class. Instead, it uses className because class is a reserved word in JavaScript.
  2. Step 2: Verify other parts of the snippet

    The quotes and closing tag are correct. The semicolon is outside JSX and valid in JavaScript.
  3. Final Answer:

    Using class instead of className -> Option A
  4. Quick Check:

    JSX requires className, not class [OK]
Hint: Replace class with className in JSX attributes [OK]
Common Mistakes:
  • Using class attribute causes React warnings or errors
  • Thinking quotes style causes errors
  • Confusing semicolon placement inside JSX
5. You want to apply inline styles to a JSX element to make text red and bold. Which is the correct way?
hard
A.
Text
B.
Text
C.
Text
D.
Text

Solution

  1. Step 1: Understand JSX style attribute syntax

    In JSX, the style attribute expects a JavaScript object, so you use double curly braces: the outer for embedding JS, the inner for the object.
  2. Step 2: Check property names and values

    CSS properties use camelCase in JSX, so fontWeight is correct. Values are strings like 'red' and 'bold'.
  3. Final Answer:

    <div style={{color: 'red', fontWeight: 'bold'}}>Text</div> -> Option D
  4. Quick Check:

    Use double braces and camelCase for inline styles [OK]
Hint: Use double braces and camelCase keys for JSX inline styles [OK]
Common Mistakes:
  • Using string style attribute instead of object
  • Missing curly braces around style object
  • Using CSS property names with hyphens instead of camelCase
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard