0
0
React Nativemobile~20 mins

Zustand as lightweight alternative in React Native - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Zustand 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 updating Zustand state?
Given this Zustand store and React Native component, what will the displayed count be after pressing the button twice?
React Native
import create from 'zustand';
import React from 'react';
import { Text, Button } from 'react-native';

const useStore = create(set => ({
  count: 0,
  increment: () => set(state => ({ count: state.count + 1 }))
}));

function Counter() {
  const { count, increment } = useStore();
  return (
    <>
      <Text>{count}</Text>
      <Button title="Add" onPress={increment} />
    </>
  );
}
AThe count displayed will be 2
BThe count displayed will be 1
CThe count displayed will be 0
DThe app will crash with an error
Attempts:
2 left
💡 Hint
Each button press calls increment which adds 1 to count.
🧠 Conceptual
intermediate
2:00remaining
Why choose Zustand over React Context for state management?
Which of these is a key advantage of Zustand compared to React Context API in React Native apps?
AReact Context supports asynchronous state updates natively
BZustand requires more boilerplate code than React Context
CReact Context is faster because it uses hooks internally
DZustand avoids unnecessary re-renders by subscribing only to selected state slices
Attempts:
2 left
💡 Hint
Think about how components update when state changes.
lifecycle
advanced
2:00remaining
How does Zustand handle component unmounting?
What happens to Zustand store subscriptions when a React Native component using useStore unmounts?
AZustand automatically cleans up subscriptions to prevent memory leaks
BSubscriptions remain active causing memory leaks unless manually removed
CZustand throws an error if a component unmounts without unsubscribing
DSubscriptions pause but do not unsubscribe until app reload
Attempts:
2 left
💡 Hint
Think about React hooks cleanup behavior.
🔧 Debug
advanced
2:00remaining
Why does this Zustand state update not trigger re-render?
Consider this code snippet: const useStore = create(set => ({ count: 0, setCount: (val) => set({ count: val }) })); function Counter() { const count = useStore(state => state.count); const setCount = useStore(state => state.setCount); React.useEffect(() => { setCount(1); setCount(1); }, []); return {count}; } Why does the Text component not update after the second setCount call?
ABecause setCount is asynchronous and batches updates incorrectly
BBecause useStore selector is missing dependencies causing stale closure
CBecause the state value did not change on second call, so no re-render triggered
DBecause React Native Text component does not update on state changes
Attempts:
2 left
💡 Hint
Think about how Zustand detects state changes.
navigation
expert
3:00remaining
How to persist Zustand state across React Native app restarts?
Which approach correctly persists Zustand state using AsyncStorage in React Native?
React Native
import create from 'zustand';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { persist } from 'zustand/middleware';

const useStore = create(persist(
  (set) => ({ count: 0, increment: () => set(state => ({ count: state.count + 1 })) }),
  {
    name: 'count-storage',
    getStorage: () => AsyncStorage
  }
));
APersist middleware requires manual save and load calls, so this code misses them
BThis code correctly persists state using AsyncStorage with zustand's persist middleware
CAsyncStorage cannot be used with zustand persist middleware in React Native
DThe getStorage option must return a promise, so this code will fail
Attempts:
2 left
💡 Hint
Check zustand persist docs for React Native usage.