Bird
Raised Fist0
React Nativemobile~20 mins

TextInput with controlled state in React Native - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
TextInput Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ ui_behavior
intermediate
2:00remaining
What is the output when typing in this controlled TextInput?

Consider this React Native component with a controlled TextInput. What will the Text below display as you type?

React Native
import React, { useState } from 'react';
import { View, TextInput, Text } from 'react-native';

export default function App() {
  const [text, setText] = useState('');
  return (
    <View>
      <TextInput
        value={text}
        onChangeText={setText}
        placeholder="Type here"
      />
      <Text>{text}</Text>
    </View>
  );
}
AThe Text below shows the reversed input text.
BThe Text below remains empty no matter what you type.
CThe Text below shows exactly what you type in real time.
DThe Text below shows the input text but only after you press Enter.
Attempts:
2 left
💡 Hint

Think about how the value and onChangeText props work together in a controlled input.

📝 Syntax
intermediate
2:00remaining
Which option correctly updates state on TextInput change?

Which code snippet correctly updates the state when the user types in a controlled TextInput?

A<TextInput value={text} onChangeText={(text) => setText(text)} />
B<TextInput value={text} onChangeText={(e) => setText(e.target.value)} />
C<TextInput value={text} onChange={(e) => setText(e.nativeEvent.text)} />
D<TextInput value={text} onChangeText={setText} />
Attempts:
2 left
💡 Hint

Remember that onChangeText receives the new text string directly, not an event object.

❓ lifecycle
advanced
2:00remaining
What happens if you omit the value prop in a controlled TextInput?

In a controlled TextInput, what is the effect of removing the value prop but keeping onChangeText?

React Native
import React, { useState } from 'react';
import { TextInput } from 'react-native';

export default function App() {
  const [text, setText] = useState('');
  return <TextInput onChangeText={setText} placeholder="Type here" />;
}
AThe TextInput becomes uncontrolled and user input is visible but state is updated.
BThe TextInput will not accept any input and appears disabled.
CThe app crashes with a runtime error about missing value prop.
DThe TextInput shows the last typed value but does not update state.
Attempts:
2 left
💡 Hint

Think about controlled vs uncontrolled inputs and what happens when value is missing.

🔧 Debug
advanced
2:00remaining
Why does this controlled TextInput not update the displayed text?

Given this code, why does the TextInput not show what the user types?

React Native
import React, { useState } from 'react';
import { TextInput } from 'react-native';

export default function App() {
  const [text, setText] = useState('');
  return <TextInput value={text} onChangeText={() => setText('')} placeholder="Type here" />;
}
ABecause <code>onChangeText</code> resets state to empty string on every change.
BBecause <code>value</code> is not set to the state variable.
CBecause <code>onChangeText</code> is missing the event parameter.
DBecause the placeholder text overrides the input value.
Attempts:
2 left
💡 Hint

Look at what onChangeText does to the state on every input.

🧠 Conceptual
expert
2:00remaining
What is the main benefit of using controlled TextInput components?

Why do developers prefer controlled TextInput components over uncontrolled ones in React Native?

AThey automatically improve app performance by reducing re-renders.
BThey prevent the user from typing invalid characters by default.
CThey enable the keyboard to show special keys automatically without extra code.
DThey allow the app to have full control over the input value and validation in real time.
Attempts:
2 left
💡 Hint

Think about how state and UI stay in sync with controlled inputs.

Practice

(1/5)
1. What does it mean when a TextInput in React Native is "controlled"?
easy
A. The input value is managed by React state using value and onChangeText.
B. The input automatically saves data to a database.
C. The input cannot be edited by the user.
D. The input uses default native keyboard settings only.

Solution

  1. Step 1: Understand controlled input concept

    A controlled TextInput means React state holds the current text value.
  2. Step 2: Identify how React manages input

    React uses value prop to set input text and onChangeText to update state on typing.
  3. Final Answer:

    The input value is managed by React state using value and onChangeText. -> Option A
  4. Quick Check:

    Controlled input = React state control [OK]
Hint: Controlled means React state controls input text [OK]
Common Mistakes:
  • Thinking controlled means input is read-only
  • Confusing controlled with auto-saving
  • Assuming native keyboard controls the value
2. Which of the following is the correct way to create a controlled TextInput in React Native?
easy
A. <TextInput value={text} onChange={setText} />
B. <TextInput value={text} onChangeText={setText} />
C. <TextInput defaultValue={text} onChange={setText} />
D. <TextInput defaultValue={text} onChangeText={text} />

Solution

  1. Step 1: Identify correct props for controlled input

    The value prop sets the input text, and onChangeText updates state on typing.
  2. Step 2: Check each option's syntax

    <TextInput value={text} onChangeText={setText} /> uses value and onChangeText correctly. Others misuse onChange or defaultValue.
  3. Final Answer:

    <TextInput value={text} onChangeText={setText} /> -> Option B
  4. Quick Check:

    Use value + onChangeText for controlled input [OK]
Hint: Use value and onChangeText props for controlled TextInput [OK]
Common Mistakes:
  • Using onChange instead of onChangeText
  • Using defaultValue for controlled input
  • Passing wrong handler to onChangeText
3. What will be displayed inside the TextInput after typing "Hi" in this code?
const [text, setText] = React.useState('');

<TextInput value={text} onChangeText={setText} />
medium
A. The input will show "undefined".
B. The input will remain empty.
C. The input will show "Hi" as typed.
D. The input will show "" (empty string) always.

Solution

  1. Step 1: Understand state updates on typing

    Typing "Hi" triggers onChangeText which calls setText to update state to "Hi".
  2. Step 2: Value prop reflects state

    The value prop uses text state, so input shows "Hi" as typed.
  3. Final Answer:

    The input will show "Hi" as typed. -> Option C
  4. Quick Check:

    State updates input value = typed text [OK]
Hint: Value prop shows current state text instantly [OK]
Common Mistakes:
  • Thinking input won't update without defaultValue
  • Confusing onChangeText with onChange
  • Assuming input clears after typing
4. Identify the error in this controlled TextInput code:
const [text, setText] = React.useState('');

<TextInput value={text} onChange={setText} />
medium
A. Using onChange instead of onChangeText causes no updates.
B. State should be initialized with null, not empty string.
C. Missing defaultValue prop causes error.
D. The value prop should be omitted for controlled input.

Solution

  1. Step 1: Check event handler prop

    TextInput uses onChangeText for text changes, not onChange.
  2. Step 2: Effect of wrong handler

    Using onChange means setText never runs, so state stays empty and input doesn't update.
  3. Final Answer:

    Using onChange instead of onChangeText causes no updates. -> Option A
  4. Quick Check:

    Use onChangeText, not onChange, for TextInput [OK]
Hint: Use onChangeText, not onChange, for TextInput updates [OK]
Common Mistakes:
  • Confusing onChange with onChangeText
  • Thinking defaultValue is required for controlled input
  • Removing value prop breaks control
5. You want to create a controlled TextInput that only accepts uppercase letters. Which code snippet correctly implements this behavior?
hard
A.
const [text, setText] = React.useState('');

<TextInput
  value={text}
  onChangeText={t => setText(t.toLowerCase())}
/>
B.
const [text, setText] = React.useState('');

<TextInput
  value={text.toUpperCase()}
  onChangeText={setText}
/>
C.
const [text, setText] = React.useState('');

<TextInput
  defaultValue={text.toUpperCase()}
  onChangeText={setText}
/>
D.
const [text, setText] = React.useState('');

<TextInput
  value={text}
  onChangeText={t => setText(t.toUpperCase())}
/>

Solution

  1. Step 1: Understand uppercase enforcement

    To force uppercase, transform input text to uppercase before saving state.
  2. Step 2: Check each option's logic

    const [text, setText] = React.useState('');
    
    <TextInput
      value={text}
      onChangeText={t => setText(t.toUpperCase())}
    />
    converts input to uppercase in onChangeText before calling setText.
    const [text, setText] = React.useState('');
    
    <TextInput
      value={text.toUpperCase()}
      onChangeText={setText}
    />
    only uppercases value but stores raw input, so user can type lowercase.
    const [text, setText] = React.useState('');
    
    <TextInput
      defaultValue={text.toUpperCase()}
      onChangeText={setText}
    />
    uses defaultValue which is uncontrolled.
    const [text, setText] = React.useState('');
    
    <TextInput
      value={text}
      onChangeText={t => setText(t.toLowerCase())}
    />
    converts to lowercase, opposite of requirement.
  3. Final Answer:

    <TextInput value={text} onChangeText={t => setText(t.toUpperCase())} /> -> Option D
  4. Quick Check:

    Transform input in onChangeText for controlled uppercase [OK]
Hint: Transform text in onChangeText before setting state [OK]
Common Mistakes:
  • Trying to uppercase value prop only
  • Using defaultValue instead of value
  • Transforming text to lowercase by mistake
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