Choosing the right state management affects your app's smoothness and battery use. Simple state (like React's useState) updates fast and uses little memory, ideal for small apps. Complex libraries (Redux, MobX) add overhead but help manage big apps. Poor state choices can cause slow UI updates and lag, dropping below 60fps.
State management comparison in React Native - Build, Publish & Deploy
To keep 60fps, update only necessary components. Use memoization (React.memo) to avoid re-rendering unchanged parts. For Redux, use selectors to limit updates. Avoid deep nested state changes; flatten state shape. Batch state updates to reduce renders. Profile with React DevTools to spot slow updates.
Lightweight state (React hooks) adds almost no size. Libraries like Redux or MobX increase bundle size by a few hundred KB, which can slow startup slightly. Use code splitting and lazy loading to reduce initial load. Tree shaking helps remove unused code from state libraries.
State management libraries work the same on both platforms in React Native. However, Android devices vary more in memory and CPU, so heavy state libraries may impact Android performance more. iOS tends to have more consistent hardware, so performance is more predictable. Always test on real devices for both.
Neither Apple App Store nor Google Play restrict state management choices. But apps must be responsive and stable. Excessive memory use or crashes from bad state handling can cause rejection. Follow best practices for smooth UI and low battery use to pass reviews easily.
Your app takes 5 seconds to load this screen. What's likely wrong?
- Too many unnecessary state updates causing slow rendering.
- Heavy state libraries loaded upfront without code splitting.
- Deep or complex state causing slow reconciliation.
- Not using memoization or selectors to limit renders.
Practice
Solution
Step 1: Understand local state needs
Local state means data used only inside one component, like a toggle or input value.Step 2: Match state method to simplicity
useStateis designed for simple, local state inside functional components.Final Answer:
useState-> Option BQuick Check:
Simple local state =useState[OK]
- Choosing Redux for simple local state
- Confusing Context API with local state
- Thinking MobX is simpler than useState
useState in React Native?Solution
Step 1: Recall useState syntax
The correct syntax uses array destructuring: const [value, setter] = useState(initialValue);Step 2: Check each option
const [count, setCount] = useState(0); matches the correct syntax exactly.Final Answer:
const [count, setCount] = useState(0); -> Option DQuick Check:
useState syntax = const [value, setter] = useState(initial) [OK]
- Using let or var instead of const
- Not using array destructuring
- Trying to declare state with 'state' keyword
const [count, setCount] = useState(0); setCount(count + 1); setCount(count + 1); console.log(count);
Solution
Step 1: Understand state updates are asynchronous
Calling setCount twice with count + 1 uses the same stale value of count (0), so both setCount calls set count to 1.Step 2: Check console.log output
console.log(count) runs before state updates complete, so it logs the initial value 0.Final Answer:
0 -> Option AQuick Check:
State updates async, console logs old value [OK]
- Expecting count to be 2 immediately
- Thinking setCount updates synchronously
- Ignoring that console.log runs before update
const [items, setItems] = useState([]);
function addItem(newItem) {
items.push(newItem);
setItems(items);
}Solution
Step 1: Check how state is updated
The code mutates the existing array with push, which is not allowed because state must be immutable.Step 2: Understand correct update method
Instead, create a new array copy with the new item and pass it to setItems.Final Answer:
Directly mutating state array before setItems -> Option AQuick Check:
State must be immutable; don't mutate arrays [OK]
- Mutating arrays or objects directly
- Thinking useState can't hold arrays
- Calling setItems with no arguments
Solution
Step 1: Identify need for shared state
Login status must be accessible across multiple screens, so state must be shared globally.Step 2: Choose appropriate state management
React Context API allows sharing state across components without prop drilling, ideal for global data like login status.Final Answer:
Use React Context API to share login state globally -> Option CQuick Check:
Shared state across screens = Context API [OK]
- Using separate useState in each screen causing inconsistent state
- Trying to store state in local variables
- Confusing styles with state
Ready to prove it?
Pass the test and this pattern moves unknown
