0
0
React Nativemobile~20 mins

React Query for data fetching in React Native - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
React Query Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
ui_behavior
intermediate
2:00remaining
What does this React Query hook render?
Given this React Native component using React Query, what will be displayed when the data is loading?
React Native
import React from 'react';
import {Text, View} from 'react-native';
import {useQuery} from '@tanstack/react-query';

function fetchUser() {
  return new Promise(resolve => setTimeout(() => resolve({name: 'Anna'}), 1000));
}

export default function User() {
  const {data, isLoading} = useQuery(['user'], fetchUser);

  if (isLoading) return <Text>Loading user info...</Text>;

  return <Text>User: {data.name}</Text>;
}
AText component showing 'User: undefined'
BText component showing 'User: Anna' immediately
CText component showing 'Loading user info...'
DBlank screen with no text
Attempts:
2 left
💡 Hint
Think about what happens before the data is fetched.
lifecycle
intermediate
1:30remaining
When does React Query refetch data by default?
Consider a React Native app using React Query. When does React Query automatically refetch the data after the initial fetch?
AOnly when the app is restarted
BEvery 5 seconds regardless of user interaction
CNever after the first fetch unless manually triggered
DWhen the component mounts and when the app window regains focus
Attempts:
2 left
💡 Hint
Think about how React Query keeps data fresh when users return to the app.
🔧 Debug
advanced
2:30remaining
Why does this React Query hook cause an infinite loop?
Look at this React Native component using React Query. Why does it keep refetching endlessly?
React Native
import React from 'react';
import {Text} from 'react-native';
import {useQuery} from '@tanstack/react-query';

function fetchData() {
  return fetch('https://api.example.com/data').then(res => res.json());
}

export default function DataComponent() {
  const {data} = useQuery(['data'], fetchData);

  React.useEffect(() => {
    console.log('Data changed:', data);
  }, [data]);

  return <Text>{data ? data.title : 'Loading...'}</Text>;
}
ABecause useEffect triggers a state update causing rerender
BBecause the query key is a new array each render causing refetch
CBecause the fetch URL is invalid causing retries
DBecause fetchData is redefined inside the component causing query key to change
Attempts:
2 left
💡 Hint
Check what is passed as the query key and if it changes every render.
🧠 Conceptual
advanced
1:30remaining
What is the purpose of React Query's staleTime option?
In React Query, what does setting the staleTime option do?
AIt sets how long data stays fresh before React Query considers it stale and refetches
BIt controls how often React Query retries failed requests
CIt defines the timeout duration for fetch requests
DIt disables caching of query data
Attempts:
2 left
💡 Hint
Think about how React Query decides when to refetch data automatically.
📝 Syntax
expert
3:00remaining
Which option correctly uses React Query's useMutation hook in React Native?
You want to send data to an API when a button is pressed. Which code snippet correctly uses useMutation?
React Native
import React from 'react';
import {Button, Text} from 'react-native';
import {useMutation} from '@tanstack/react-query';

function postData(newData) {
  return fetch('https://api.example.com/post', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify(newData),
  }).then(res => res.json());
}

export default function PostButton() {
  const mutation = useMutation(postData);

  return (
    <>
      <Button title="Send" onPress={() => mutation.mutate({name: 'John'})} />
      {mutation.isLoading && <Text>Sending...</Text>}
      {mutation.isError && <Text>Error occurred</Text>}
      {mutation.isSuccess && <Text>Sent successfully</Text>}
    </>
  );
}
ACorrectly uses useMutation with mutate called on button press and shows status texts
BCalls mutate immediately during render causing infinite loop
CUses useMutation but calls mutate without arguments causing error
DUses useMutation but does not handle loading or error states
Attempts:
2 left
💡 Hint
Check how mutate is called and how UI updates based on mutation state.