0
0
React Nativemobile~20 mins

React Hook Form integration in React Native - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
React Hook Form Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this React Native form component?
Consider this React Native component using React Hook Form. What will be displayed when the user submits the form with the input 'John'?
React Native
import React from 'react';
import { View, Text, TextInput, Button } from 'react-native';
import { useForm, Controller } from 'react-hook-form';

export default function MyForm() {
  const { control, handleSubmit, formState: { errors } } = useForm();
  const onSubmit = data => alert(`Hello, ${data.name}!`);

  return (
    <View>
      <Controller
        control={control}
        rules={{ required: true }}
        name="name"
        render={({ field: { onChange, onBlur, value } }) => (
          <TextInput
            accessibilityLabel="name-input"
            onBlur={onBlur}
            onChangeText={onChange}
            value={value}
            placeholder="Enter your name"
          />
        )}
      />
      {errors.name && <Text accessibilityRole="alert">Name is required.</Text>}
      <Button title="Submit" onPress={handleSubmit(onSubmit)} />
    </View>
  );
}
ANothing happens when the Submit button is pressed.
BAn alert pops up saying: Hello, !
CThe form shows an error message: Name is required.
DAn alert pops up saying: Hello, John!
Attempts:
2 left
💡 Hint
Check how the Controller passes the input value and how handleSubmit triggers onSubmit.
state_output
intermediate
2:00remaining
What is the value of errors.name after submitting an empty form?
Given this React Native form using React Hook Form, what will be the value of errors.name after pressing Submit without typing anything?
React Native
import React from 'react';
import { View, Text, TextInput, Button } from 'react-native';
import { useForm, Controller } from 'react-hook-form';

export default function MyForm() {
  const { control, handleSubmit, formState: { errors } } = useForm();
  const onSubmit = data => console.log(data);

  return (
    <View>
      <Controller
        control={control}
        rules={{ required: true }}
        name="name"
        render={({ field: { onChange, onBlur, value } }) => (
          <TextInput
            onBlur={onBlur}
            onChangeText={onChange}
            value={value}
            placeholder="Enter your name"
          />
        )}
      />
      {errors.name && <Text>Name is required.</Text>}
      <Button title="Submit" onPress={handleSubmit(onSubmit)} />
    </View>
  );
}
AAn object with type 'required' and message undefined
BAn empty string
Cundefined
Dnull
Attempts:
2 left
💡 Hint
Check the rules and how errors object is structured in React Hook Form.
📝 Syntax
advanced
2:00remaining
Which option correctly fixes the syntax error in this React Hook Form usage?
This code snippet has a syntax error. Which option fixes it so the form works correctly?
React Native
import React from 'react';
import { useForm, Controller } from 'react-hook-form';
import { TextInput, Button, View } from 'react-native';

export default function Form() {
  const { control, handleSubmit } = useForm();
  const onSubmit = data => console.log(data);

  return (
    <View>
      <Controller
        control={control}
        name="email"
        rules={{ required: true }}
        render={({ field }) => (
          <TextInput
            onChangeText={field.onChange}
            value={field.value}
            placeholder="Email"
          />
        )}
      />
      <Button title="Send" onPress={handleSubmit(onSubmit)} />
    </View>
  );
}
ARemove the rules prop from Controller
BChange render={({ field }) => ...} to render={({ field: { onChange, value } }) => ...}
CAdd a default value: useForm({ defaultValues: { email: '' } })
DReplace onChangeText={field.onChange} with onChange={field.onChange}
Attempts:
2 left
💡 Hint
React Hook Form requires default values for controlled inputs.
🔧 Debug
advanced
2:00remaining
Why does this React Native form not update the input value on typing?
This React Native form uses React Hook Form but the TextInput does not update as the user types. What is the cause?
React Native
import React from 'react';
import { View, TextInput, Button } from 'react-native';
import { useForm, Controller } from 'react-hook-form';

export default function MyForm() {
  const { control, handleSubmit } = useForm({ defaultValues: { username: '' } });
  const onSubmit = data => console.log(data);

  return (
    <View>
      <Controller
        control={control}
        name="username"
        render={({ field }) => (
          <TextInput
            value={field.value}
            onChangeText={field.onChange}
            placeholder="Username"
          />
        )}
      />
      <Button title="Submit" onPress={handleSubmit(onSubmit)} />
    </View>
  );
}
AdefaultValues must be removed from useForm
BTextInput should use onChangeText instead of onChange
CController must have rules prop to update value
DhandleSubmit should be called inside useEffect
Attempts:
2 left
💡 Hint
Check the event handler prop names for React Native TextInput.
🧠 Conceptual
expert
3:00remaining
What happens if you omit Controller and use register with React Native TextInput?
In React Native, what is the effect of using useForm's register directly on a TextInput without Controller?
React Native
import React from 'react';
import { View, TextInput, Button } from 'react-native';
import { useForm } from 'react-hook-form';

export default function MyForm() {
  const { register, handleSubmit } = useForm();
  const onSubmit = data => console.log(data);

  return (
    <View>
      <TextInput
        {...register('email', { required: true })}
        placeholder="Email"
      />
      <Button title="Submit" onPress={handleSubmit(onSubmit)} />
    </View>
  );
}
AThe input will not work properly because React Native TextInput does not support ref forwarding needed by register
BThe form will work perfectly and validate the email input
CThe form will throw a runtime error about missing Controller
DThe input will update but validation will not trigger
Attempts:
2 left
💡 Hint
Think about how React Hook Form connects inputs and how React Native TextInput handles refs.