Bird
Raised Fist0
Reactframework~20 mins

Synthetic events in React - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Synthetic Events Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What happens when a React synthetic event is reused asynchronously?

Consider this React code snippet where a synthetic event is accessed inside a setTimeout callback:

function Button() {
  function handleClick(event) {
    setTimeout(() => {
      alert(event.type);
    }, 1000);
  }
  return <button onClick={handleClick}>Click me</button>;
}

What will the alert show when the button is clicked?

React
function Button() {
  function handleClick(event) {
    setTimeout(() => {
      alert(event.type);
    }, 1000);
  }
  return <button onClick={handleClick}>Click me</button>;
}
AIt alerts 'undefined' because the synthetic event is nullified.
BIt throws a runtime error because event is undefined.
CIt alerts 'click' as expected.
DIt alerts 'button' because event.target is used instead of event.type.
Attempts:
2 left
💡 Hint

Remember that React synthetic events are pooled and reused for performance.

📝 Syntax
intermediate
1:30remaining
Which option correctly prevents default behavior in a React synthetic event?

Given a React event handler, which code correctly prevents the default action of the event?

React
function handleSubmit(event) {
  // prevent default here
}
Aevent.defaultPrevented = true;
Bevent.preventDefault();
Cevent.stopPropagation();
Dreturn false;
Attempts:
2 left
💡 Hint

Think about the standard method to stop default browser actions in React events.

🔧 Debug
advanced
2:30remaining
Why does this React synthetic event handler cause a TypeError?

Examine this React component code:

function Input() {
  function handleChange(event) {
    const value = event.target.value.toUpperCase();
    setInputValue(value);
  }
  const [inputValue, setInputValue] = React.useState('');
  return <input value={inputValue} onChange={handleChange} />;
}

Sometimes, this code throws TypeError: Cannot read property 'value' of null. Why?

React
function Input() {
  function handleChange(event) {
    const value = event.target.value.toUpperCase();
    setInputValue(value);
  }
  const [inputValue, setInputValue] = React.useState('');
  return <input value={inputValue} onChange={handleChange} />;
}
ABecause the synthetic event is reused and event.target becomes null before accessing value.
BBecause setInputValue is called before event.target.value is defined.
CBecause the input element is uncontrolled and causes null target.
DBecause toUpperCase() is called on a number instead of a string.
Attempts:
2 left
💡 Hint

Think about React's event pooling and when event properties are accessible.

🧠 Conceptual
advanced
2:00remaining
How does React's synthetic event system improve performance?

React uses a synthetic event system instead of native browser events. Which explanation best describes how this improves performance?

ABy attaching event listeners to every DOM node individually, React speeds up event handling.
BBy converting all events to native DOM events, React avoids extra processing.
CBy pooling event objects and reusing them, React reduces memory allocation and garbage collection overhead.
DBy disabling event bubbling, React prevents unnecessary event propagation.
Attempts:
2 left
💡 Hint

Think about how reusing objects can save resources.

❓ state_output
expert
3:00remaining
What is the final state value after this React synthetic event handler runs?

Analyze this React component:

function Counter() {
  const [count, setCount] = React.useState(0);

  function handleClick(event) {
    event.persist();
    setTimeout(() => {
      setCount(count + 1);
      console.log(event.type);
    }, 1000);
  }

  return <button onClick={handleClick}>Count: {count}</button>;
}

After clicking the button once, what will be the value of count shown on the button after 1 second?

React
function Counter() {
  const [count, setCount] = React.useState(0);

  function handleClick(event) {
    event.persist();
    setTimeout(() => {
      setCount(count + 1);
      console.log(event.type);
    }, 1000);
  }

  return <button onClick={handleClick}>Count: {count}</button>;
}
A0
B2
CNaN
D1
Attempts:
2 left
💡 Hint

Consider how closures capture state values in React hooks.

Practice

(1/5)
1. What is the main purpose of React's SyntheticEvent?
easy
A. To provide a consistent event interface across different browsers
B. To replace native DOM events with custom events
C. To speed up event handling by skipping the event queue
D. To allow events only on class components

Solution

  1. Step 1: Understand SyntheticEvent role

    React's SyntheticEvent wraps native browser events to normalize differences across browsers.
  2. Step 2: Compare options

    To provide a consistent event interface across different browsers correctly states the purpose. Options A, C, and D are incorrect because SyntheticEvent does not replace native events, does not skip event queues, and works with functional components too.
  3. Final Answer:

    To provide a consistent event interface across different browsers -> Option A
  4. Quick Check:

    SyntheticEvent = consistent cross-browser event [OK]
Hint: SyntheticEvent normalizes events across browsers [OK]
Common Mistakes:
  • Thinking SyntheticEvent replaces native events
  • Believing SyntheticEvent only works with class components
  • Assuming SyntheticEvent speeds up event handling
2. Which of the following is the correct way to attach a click event handler in React using Synthetic events?
easy
A. Click me
B. Click me
C. Click me
D. Click me

Solution

  1. Step 1: Recall React event naming conventions

    React uses camelCase for event handlers, so the correct attribute is onClick.
  2. Step 2: Check each option

    <button onClick={handleClick}>Click me</button> uses onClick correctly. <button onclick={handleClick}>Click me</button> uses lowercase onclick which is invalid in JSX. <button OnClick={handleClick}>Click me</button> has incorrect capitalization. <button on-click={handleClick}>Click me</button> uses hyphen which is invalid.
  3. Final Answer:

    <button onClick={handleClick}>Click me</button> -> Option C
  4. Quick Check:

    React event handlers use camelCase like onClick [OK]
Hint: React events use camelCase like onClick [OK]
Common Mistakes:
  • Using lowercase event names like onclick
  • Using hyphens in event names
  • Incorrect capitalization like OnClick
3. Consider this React code snippet:
function MyButton() {
  function handleClick(event) {
    alert(event.type);
  }
  return <button onClick={handleClick}>Click me</button>;
}

What will be alerted when the button is clicked?
medium
A. undefined
B. click
C. onClick
D. Click

Solution

  1. Step 1: Understand event.type in SyntheticEvent

    The event.type property contains the type of the event, which for a click event is the string "click" in lowercase.
  2. Step 2: Analyze the alert output

    When the button is clicked, handleClick is called and alerts event.type, so it shows "click".
  3. Final Answer:

    click -> Option B
  4. Quick Check:

    event.type for click event = "click" [OK]
Hint: event.type is lowercase event name like 'click' [OK]
Common Mistakes:
  • Assuming event.type is capitalized
  • Confusing event handler name with event.type
  • Expecting undefined if event not passed
4. Identify the error in this React event handler code:
function Form() {
  function handleSubmit(event) {
    event.preventdefault();
    console.log('Submitted');
  }
  return <form onSubmit={handleSubmit}><button type="submit">Send</button></form>;
}
medium
A. Missing return statement in handleSubmit
B. The event handler should be named onsubmit, not onSubmit
C. The button type should be button, not submit
D. event.preventdefault() should be event.preventDefault() with capital D

Solution

  1. Step 1: Check event method spelling

    The method to stop form submission is event.preventDefault() with a capital D. The code uses lowercase 'd', which causes an error.
  2. Step 2: Verify other parts

    The event handler should be named onsubmit, not onSubmit is wrong because React uses camelCase onSubmit. The button type should be button, not submit is incorrect because submit button type is correct. Missing return statement in handleSubmit is irrelevant since no return needed in handler.
  3. Final Answer:

    event.preventdefault() should be event.preventDefault() with capital D -> Option D
  4. Quick Check:

    Method names are case-sensitive: preventDefault() [OK]
Hint: JavaScript method names are case-sensitive [OK]
Common Mistakes:
  • Using lowercase preventdefault() instead of preventDefault()
  • Confusing onSubmit with onsubmit
  • Changing button type unnecessarily
5. You want to handle a keyboard event in React and only respond when the Enter key is pressed. Which is the best way to do this using Synthetic events?
function Input() {
  function handleKeyDown(event) {
    // What condition should go here?
  }
  return <input onKeyDown={handleKeyDown} />;
}
hard
A. if (event.key === 'Enter') { /* handle Enter */ }
B. if (event.code === 13) { /* handle Enter */ }
C. if (event.keyCode === 13) { /* handle Enter */ }
D. if (event.keyName === 'Enter') { /* handle Enter */ }

Solution

  1. Step 1: Understand SyntheticEvent keyboard properties

    React SyntheticEvent supports event.key which returns the key name as a string, e.g., 'Enter'. This is preferred over deprecated keyCode.
  2. Step 2: Evaluate options

    if (event.key === 'Enter') { /* handle Enter */ } uses event.key === 'Enter' which is modern and recommended. if (event.keyCode === 13) { /* handle Enter */ } uses keyCode which is deprecated. Options A, B, and D use deprecated or invalid properties.
  3. Final Answer:

    if (event.key === 'Enter') { /* handle Enter */ } -> Option A
  4. Quick Check:

    Use event.key === 'Enter' for keyboard checks [OK]
Hint: Use event.key with string names, not keyCode [OK]
Common Mistakes:
  • Using deprecated event.keyCode
  • Using invalid event.code or event.keyName
  • Comparing keyCode to string instead of number
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