Last Minute Notes

React Native Interview Playbook

React Native interview rehearsal: what each level is expected to know, a 50-question bank with strong-answer checklists, predict-the-behavior puzzles, machine coding tasks, mobile system design prompts, production scenarios, cheat sheets, common mistakes, and a 7-day study plan.

📘 React Native Interview Playbook

The other pages teach the material. This page is for rehearsal: a question bank with what a strong answer contains, predict-the-behavior puzzles, machine coding tasks that come up in live rounds, mobile system design prompts, and a study plan.

Table of Contents

  1. What Interviewers Look For
  2. Question Bank
  3. Predict the Behavior
  4. Machine Coding Tasks
  5. Mobile System Design Prompts
  6. Production Scenarios
  7. Cheat Sheets
  8. Common Mistakes
  9. Study Plan

1. What Interviewers Look For

LevelExpected
JuniorReact fundamentals, core components, Flexbox defaults, Text rules, FlatList basics, navigation stacks and tabs, fetching data, platform differences
MidList performance, state management choices, TanStack Query, storage options, auth flows and deep links, Reanimated basics, permissions, push notifications, testing with RNTL, release builds
SeniorNew Architecture internals (JSI, Fabric, Turbo Modules), profiling and startup optimization, native modules, offline-first sync, OTA strategy and runtime versions, CI/CD, crash monitoring, security
Staff / platformArchitecture for many teams (monorepos, shared design systems), brownfield integration, upgrade strategy, build infrastructure, performance budgets and regression tracking, web and native code sharing

Signals that raise your rating:

  • Naming the thread a problem lives on (JS vs UI) and how you measured it.
  • Mentioning both platforms (Android back, edge-to-edge, permissions differences) without being asked.
  • Knowing what is current (New Architecture only, Hermes, React Native DevTools, Expo with CNG, CodePush retired).
  • Separating server state from client state.
  • Thinking about old app versions in the wild when designing APIs and releases.

2. Question Bank

2.1 Fundamentals (10)

#QuestionStrong answer includesRead
1How does React Native render UI?Native views, not a web view; React reconciler plus Fabric; HermesFundamentals
2React vs React Native?Same React core, different host components, styling, toolingFundamentals
3React Native vs Flutter vs native?Native views vs own renderer vs platform code; team skills, OTA, code sharingFundamentals
4Expo vs bare RN?Recommended framework, dev builds, CNG and config plugins, EASFundamentals
5Flexbox differences from the web?column default, flexShrink: 0, no cascade, unitless dpFundamentals
6Why must text be inside Text?Text maps to native text views; {0 && ...} crashFundamentals
7Platform-specific code?Platform.OS, Platform.select, .ios.tsx / .android.tsxFundamentals
8Safe areas and dimensions?react-native-safe-area-context, useWindowDimensions, edge-to-edgeFundamentals
9Keyboard handling?KeyboardAvoidingView, keyboardShouldPersistTaps, keyboard-controllerFundamentals
10Styling options?StyleSheet, NativeWind, Unistyles, Tamagui; trade-offsFundamentals

2.2 Architecture (10)

#QuestionStrong answer includesRead
11Explain the RN architectureThreads, JSI, Fabric render / commit / mount, Turbo ModulesArchitecture
12Problems with the old bridge?Async JSON, serialization, congestion, eager init, no sync callsArchitecture
13What is JSI?C++ host objects and functions callable from JS, sync capableArchitecture
14What does Fabric improve?Sync layout reads, concurrent React, immutable shadow tree, view flatteningArchitecture
15Turbo Modules vs legacy modules?Lazy init, Codegen types, sync or async via JSIArchitecture
16What is Codegen?Generates native interfaces from typed specs, compile-time safetyArchitecture
17Why Hermes?Bytecode precompilation, mmap, low memory, GC, DevToolsArchitecture
18What runs on which thread?JS thread for React, UI thread for views and gestures, background for layoutArchitecture
19Bridgeless mode and interop layer?Bridge removed; old libraries run through interopArchitecture
20Concurrent React on RN?Transitions, useDeferredValue, Suspense possible because of FabricArchitecture

2.3 Navigation, lists, and data (12)

#QuestionStrong answer includesRead
21Native stack vs JS stack?Platform primitives vs JS transitions, react-native-screensNavigation
22Implement auth flow navigationConditional screens on auth state, splash while reading tokenNavigation
23Deep links vs universal links?Custom scheme vs verified HTTPS, AASA and assetlinks, validationNavigation
24Why do screens stay mounted?Stack model; focus events instead of mount effectsNavigation
25Expo Router vs React Navigation?File-based routes, URLs everywhere, typed routes, built on RN NavigationNavigation
26ScrollView vs FlatList?All children vs virtualization windowLists and Data
27Optimize a slow FlatListMemo rows, stable renderItem, getItemLayout, windowSize, imagesLists and Data
28FlashList vs FlatList?Recycling, fewer blank areas, row-state gotchaLists and Data
29State management choice?Server vs client state, Query plus Zustand / RTK, Context limitsLists and Data
30Storage options?AsyncStorage, MMKV, SecureStore, SQLite; what goes whereLists and Data
31Design offline-firstLocal DB as source of truth, outbox, sync cursor, conflictsLists and Data
32Token refreshInterceptor, deduped refresh, secure storage, logout on failureLists and Data

2.4 Animation and native (9)

#QuestionStrong answer includesRead
33Why do JS animations jank?Per-frame dependency on the JS threadAnimations
34Native driver limits?Only opacity and transforms, no layout propsAnimations
35Shared values and worklets?UI-thread runtime, no re-render, runOnJSAnimations
36Build swipe-to-dismissPan gesture, velocity, spring or decay, layout animationAnimations
37Write a native moduleSpec, Codegen, Kotlin and Obj-C++ / Swift, or Expo ModulesNative
38Native UI componentcodegenNativeComponent, props, events, commandsNative
39Push notifications end to endAPNs / FCM tokens, backend, foreground / background / cold startNative
40Permissions best practiceIn-context requests, denied states, Settings, usage stringsNative
41Config plugins and CNGGenerated native folders, declarative native configNative

2.5 Performance and shipping (9)

#QuestionStrong answer includesRead
42The app is slow, what do you do?Release build, low-end device, identify thread, profile, fix, re-measurePerformance
43Improve cold startHermes, lazy imports, no top-level work, cache-first, defer SDKsPerformance
44React Compiler impactAuto memoization, Rules of React, fewer manual hooksPerformance
45Finding memory leaksListeners, timers, images; heap snapshots, Instruments, LeakCanaryPerformance
46Debugging tools todayReact Native DevTools, perf monitor, native profilers, Flipper removedPerformance
47Testing strategyJest, RNTL, Maestro / Detox, release buildsRelease
48OTA updates: rules and risksJS-only, runtime version, channels, staged rollout, store policyRelease
49Mobile security basicsNo secrets in bundle, Keychain / Keystore, pinning, integrity APIsRelease
50Supporting old app versionsAPI versioning, minimum version check, feature flagsRelease

3. Predict the Behavior

3.1

function Badge({ count }: { count: number }) {
  return <View>{count && <Text>{count} new</Text>}</View>;
}
<Badge count={0} />

Answer: crash with "Text strings must be rendered within a <Text> component". 0 && ... evaluates to 0, which React renders as a raw string inside a View. Use count > 0 && ....

3.2

<View style={{ flexDirection: 'row' }}>
  <Image source={avatar} style={{ width: 40, height: 40 }} />
  <Text>{veryLongName}</Text>
</View>

Answer: the text overflows off the screen instead of wrapping, because flexShrink defaults to 0 in RN. Add flexShrink: 1 (or flex: 1) to the Text.

3.3

function Screen() {
  useEffect(() => {
    loadData();
  }, []);
  ...
}
// User opens Screen, pushes Details, then goes back.

Answer: loadData runs once. Going back does not remount Screen, because it stayed mounted under Details. Use useFocusEffect to refresh on return.

3.4

Animated.timing(height, { toValue: 200, duration: 300, useNativeDriver: true }).start();

Answer: error: height is not supported by the native animated module. The native driver only supports non-layout properties such as opacity and transform. Use transform: scale, useNativeDriver: false (JS-driven), or Reanimated.

3.5

const offset = useSharedValue(0);
console.log('render');
const onPress = () => { offset.value = withSpring(offset.value + 50); };

Answer: pressing does not log render. Shared value changes update animated styles on the UI thread without re-rendering the component.

3.6

<ScrollView>
  <Header />
  <FlatList data={thousandItems} renderItem={renderItem} />
</ScrollView>

Answer: works but renders all 1000 items and logs a warning about nesting virtualized lists inside plain ScrollViews with the same orientation. The outer ScrollView gives the list unlimited height, so virtualization is lost. Use ListHeaderComponent instead.

3.7

// FlashList row
function Row({ item }) {
  const [expanded, setExpanded] = useState(false);
  ...
}

Answer: after the user expands a row and scrolls, a different item may appear already expanded. FlashList recycles the component instance, so its local state carries over to the new item. Store expansion in data keyed by ID, or reset state when item.id changes.

3.8

const [query, setQuery] = useState('');
const results = useMemo(() => heavyFilter(items, query), [items, query]);
<TextInput value={query} onChangeText={setQuery} />

Answer: typing feels laggy on low-end devices, because every keystroke synchronously re-filters before the input re-renders. Use useDeferredValue(query) for the filter (Fabric supports concurrent rendering), or debounce.


4. Machine Coding Tasks

Typical 60 to 90 minute live tasks, with what to show:

TaskShow
Infinite feed with pull-to-refreshuseInfiniteQuery, cursor pagination, FlashList, loading / empty / error states, memoized rows, image sizing
Search with autocompleteDebounce or useDeferredValue, cancel stale requests (AbortController), keyboard handling, empty state
Login flowForm validation, secure token storage, conditional navigation, splash during token check
Image gallery with full-screen viewerGrid with numColumns, expo-image, pinch-to-zoom with Gesture Handler and Reanimated, shared element feel
Chat screenInverted list, optimistic send, pending / failed states, keyboard-aware input, new message scroll behavior
Swipeable cards (Tinder style)Pan gesture, rotation interpolation, velocity threshold, dismissal callback, stack rendering
Todo with offline syncLocal persistence (MMKV / SQLite), outbox, retry on reconnect with NetInfo
Bottom sheetSnap points, pan gesture, backdrop, keyboard interaction, or explain library choice

Structure your solution like production code: typed props, small components, a data hook per feature, and a short note on what you would test.


5. Mobile System Design Prompts

Frame every answer with: requirements (offline? real-time? scale?), client architecture, data flow, API contract, caching and persistence, performance, release and monitoring.

PromptKey points
Design an Instagram-like feedCursor pagination, FlashList, image CDN with size params, prefetch next images, cache last feed for instant start, optimistic likes, video autoplay only when visible
Design WhatsApp-like chatWebSocket with reconnect and backoff, local SQLite as source of truth, outbox with client IDs, delivery and read receipts, push for background, media upload with resumable background sessions
Design an offline-first notes appLocal DB, sync protocol with cursors, conflict resolution, background sync tasks, encryption at rest
Design a ride-hailing driver appBackground location with battery trade-offs, foreground service on Android, map rendering, real-time updates, state machine for trip lifecycle, poor network handling
Design an e-commerce appProduct listing and search, cart persistence, checkout security (server-side pricing, payment SDKs), deep links from campaigns, A/B testing with feature flags
Design the release process for a 50-engineer RN appMonorepo, CI with fingerprints, preview builds per PR, OTA channels, staged rollouts, crash and performance gates, release trains

See Frontend System Design for the general framework and Server-Driven UI for config-driven screens in RN.


6. Production Scenarios

ScenarioStrong answer
Crash rate spikes after a releaseCheck if it is OTA or binary; roll back the OTA or halt the staged rollout; read symbolicated traces by version and update ID; hotfix
Android users report the app "freezes" on launchANRs from main-thread work at startup (SDK init, sync disk I/O); move to background, defer, verify with Play vitals
Feed scroll is janky only on AndroidOverdraw, shadows, large images, heavy rows; profile with Perfetto; flatten views, resize images, FlashList
Memory grows until the OS kills the appHeap snapshots over a session; leaked listeners, unbounded image cache, screens never popped
Users stuck on an old version calling a removed APIRestore compatibility, add minimum version check and update prompt, version APIs going forward
A deep link opens a blank screenLink handled before auth or data ready; queue the link, validate params, add a not-found screen
OTA update crashes old binariesNative mismatch; enforce runtime versions (fingerprint policy), roll back the update
Push notifications stopped on iOSExpired APNs key or certificate, environment mismatch (sandbox vs production), stale tokens; check provider responses

7. Cheat Sheets

7.1 Which list?

SituationUse
Under about 30 static itemsScrollView or map
Long list, simple rowsFlatList with tuning
Grouped with headersSectionList or FlashList with sticky headers
Long, heavy, or mixed rowsFlashList
Chat / bidirectionalInverted list, Legend List, or maintainVisibleContentPosition

7.2 Which storage?

DataUse
Tokens, credentialsSecureStore / Keychain / Keystore
Settings, flags, small persisted stateMMKV
Large or relational dataSQLite (expo-sqlite, op-sqlite) with Drizzle or WatermelonDB
Files and mediaFile system
Server data cacheTanStack Query persisted cache

7.3 Which animation tool?

NeedUse
Opacity / transform, no extra dependencyAnimated + useNativeDriver
State-driven transitionsReanimated CSS transitions
Gesture-drivenGesture Handler + Reanimated
Mount / unmount / reorderReanimated entering, exiting, layout
Custom drawingSkia

7.4 Version facts worth knowing

FactValue
Hermes default0.70
New Architecture default0.76 (Oct 2024)
New Architecture only, legacy removed0.82
Flipper removed from template0.74
React 19 in RN0.78
CodePush / App Center retiredMarch 2025

8. Common Mistakes

MistakeBetter
Talking only about iOSCover Android back, permissions, edge-to-edge, performance on low-end devices
"I would use Redux for everything"Server state in a query library, small client store, local state where possible
Measuring performance in debug modeRelease builds on a low-end device
Animating with setStateReanimated or the native driver
Storing tokens in AsyncStorageKeychain / Keystore
Shipping secrets in env variablesInlined in the bundle and public; keep on server
"We'll fix it with an OTA update" for native changesNative changes need a store build; runtime versions block mismatches
Describing the bridge as currentNew Architecture is the only architecture now
useEffect to refresh on screen returnuseFocusEffect
Ignoring accessibilityRoles, labels, font scaling, screen reader testing

9. Study Plan

DayFocusDo
1FundamentalsBuild a small screen with Flexbox, Pressable, TextInput, safe areas
2ArchitectureExplain the threads and New Architecture aloud in 3 minutes
3NavigationAuth flow, tabs inside a stack, a deep link
4Lists, State, and DataInfinite feed with TanStack Query and FlashList, MMKV persistence
5Animations and NativeSwipe-to-dismiss card; read one Expo Module and one Turbo Module
6Performance and ReleaseProfile a list, write one RNTL test and one Maestro flow, explain OTA rules
7This playbookAnswer the question bank aloud, do one machine coding task and one system design prompt timed

On this page