React Native Interview Questions and Answers 2026

What changed in 2026 drives
Mass-recruiter offer letters are flatter for 2026 batch - the 4-5 LPA ASE band has barely budged in three years while inflation eats real wages. Premium tracks (Digital, Pro, Elite, Specialist) are still where the differential lives, and they are entirely test-driven. If you are aiming higher than the default offer, the coding round is not optional pageantry - it is the entire interview.
What I'd actually study for this
- 01Two solid coding-round answers (1 medium-hard DSA each, with edge-case discussion) > five half-baked ones
- 02One real project you can defend end-to-end - file paths, design decisions, and what you would change
- 03One DBMS schema you actually built (not a textbook ER diagram), with at least 3 join-heavy queries written from memory
- 04Three behavioural STAR stories: failure recovered, conflict handled, ownership taken
Where most candidates trip up
The single biggest mistake is treating company-specific guides as primary prep and DSA as secondary. It is the opposite. Mass recruiters use the test as a filter, but premium tracks at every IT services company use coding to allocate offer band. Spend 70% of prep time on DSA + system fundamentals, 20% on company-specific patterns, 10% on HR rehearsal. Reverse that ratio and you collect the default offer.
Editorial commentary by Aditya Sharma · written for PapersAdda · not generated, not aggregated.
React Native enables building truly native iOS and Android applications using React and JavaScript/TypeScript. Candidates report that the new architecture (JSI/Fabric/TurboModules), React Navigation setup, FlatList optimization, native modules, and the distinction between React Native and Expo are the most frequently tested topics in mobile and full-stack developer interviews. This guide covers 45 questions with code examples. Confirm the React Native version and whether the new architecture is enabled at your target company on their official careers portal.
Table of Contents
- React Native Fundamentals
- New Architecture
- Core Components and UI
- Navigation
- State Management
- Performance Optimization
- Native Modules
- 5-Question Mock Test
- Frequently Asked Questions
React Native Fundamentals
Q1. How does React Native work? What is the bridge? Easy
React Native runs JavaScript in a separate thread (the JS thread). In the old architecture, communication between JavaScript and native code happens over the Bridge: a serialized, asynchronous message queue. When React renders JSX, it produces a virtual DOM. React Native's renderer translates this into native view creation calls that are sent over the bridge to the main (UI) thread.
Old architecture limitations:
- All JS-to-native calls are async and serialized to JSON
- No synchronous access to native APIs
- Bridge creates a performance ceiling for high-frequency interactions
- All native modules loaded at startup (slow cold start)
Q2. What is Expo and when should you use bare React Native? Easy
| Feature | Expo Managed | Expo Bare | Bare React Native |
|---|---|---|---|
| Native code access | Limited (expo modules) | Full | Full |
| Build setup | None (EAS Build) | Xcode + Android Studio | Xcode + Android Studio |
| OTA updates | Yes (expo-updates) | Yes | Manual setup |
| Native module install | npx expo install | Yes | Yes |
| New architecture | Supported | Supported | Supported |
| Best for | Rapid prototyping, most apps | Most production apps | Custom native code |
Use bare React Native (or Expo bare) when: you need a native module not available in Expo's ecosystem, you have existing native code to integrate, or your team has strong native iOS/Android expertise.
Q3. What is the difference between React Native StyleSheet and inline styles? Easy
import { StyleSheet, Text, View } from 'react-native'
// StyleSheet.create: processes styles at registration time,
// validates on dev, sends integer ID over bridge instead of full object
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
padding: 16,
},
title: {
fontSize: 24,
fontWeight: 'bold',
color: '#000',
},
})
// Inline: new object every render - avoid for stable styles
<View style={{ flex: 1, padding: 16 }}> // creates new object each render
// Preferred
<View style={styles.container}>
<Text style={styles.title}>Title</Text>
// Dynamic styles: array merging
<View style={[styles.container, isActive && styles.active]} />
Q4. What is the difference between StyleSheet and CSS? Easy
React Native styles are a subset of CSS. Key differences:
| Feature | CSS | React Native |
|---|---|---|
| Units | px, em, rem, % | Density-independent pixels (no unit) |
| Cascade | Yes | No (no global stylesheet) |
| Pseudo-classes | :hover, :focus | Not supported |
| Floats, display:table | Yes | No (Flexbox only) |
| Inheritance | Yes (some props) | No (each component isolated) |
| Animations | CSS transitions | Animated API, Reanimated |
RN uses Yoga (a Flexbox implementation) for layout. flexDirection defaults to column (not row as in CSS).
Q5. What are the React Native core components? Easy
| Component | Web equivalent | Notes |
|---|---|---|
| View | div | Flex container, doesn't scroll |
| Text | span/p | All text must be in Text |
| Image | img | Remote + local, styles required |
| TextInput | input | Controlled input |
| ScrollView | overflow: scroll | Renders all children |
| FlatList | virtual list | Lazy rendering, large data |
| SectionList | grouped list | Sections with headers |
| TouchableOpacity | button | Opacity feedback |
| Pressable | button | More flexible than Touchable |
| Modal | dialog | Native modal overlay |
| SafeAreaView | CSS safe-area-inset | Notch/home indicator avoidance |
New Architecture
Q6. What is JSI (JavaScript Interface) in the new architecture? Medium
JSI is a C++ abstraction that allows JavaScript (via Hermes) to directly hold references to C++ host objects and call methods synchronously, without serialization. This replaces the async JSON bridge.
// Old bridge (async, serialized)
NativeModules.Camera.takePicture({ quality: 0.8 })
.then(uri => setPhoto(uri)) // async, JSON serialized over bridge
// New architecture with JSI (synchronous where needed)
// The native module is a C++ host object; JS holds a direct reference
const camera = global.nativeCameraModule
const uri = camera.takePicture({ quality: 0.8 }) // can be synchronous
Q7. What is Fabric (the new renderer)? Medium
Fabric is the new React Native rendering system. Changes:
- C++ shadow tree: layout calculations (via Yoga) happen on the C++ layer, not on the JS thread. This makes layout synchronous and allows layout to run on any thread.
- Synchronous rendering: UI thread can synchronously call into JavaScript for concurrent React features (Suspense, transitions).
- Renderer in C++: shared between iOS, Android, and other platforms.
- React concurrent mode support: works with
useTransition,useDeferredValue.
Q8. What are TurboModules? Medium
TurboModules replace the old NativeModules system. Key improvements:
- Lazy loading: modules load on first access, not at startup (faster cold start)
- Synchronous access: via JSI, no serialization required
- Type-safe: CodeGen generates type-safe bindings from TypeScript specs
- Shared C++ implementation: cross-platform modules can share native logic
// TurboModule spec (TypeScript)
import type { TurboModule } from 'react-native'
import { TurboModuleRegistry } from 'react-native'
export interface Spec extends TurboModule {
getBatteryLevel(): Promise<number>
getDeviceName(): string // synchronous
}
export default TurboModuleRegistry.getEnforcing<Spec>('NativeDeviceInfo')
Core Components and UI
Q9. What is the difference between FlatList and SectionList? Easy
// FlatList: uniform list
<FlatList
data={users}
keyExtractor={(item) => item.id}
renderItem={({ item, index }) => <UserRow user={item} />}
ListHeaderComponent={<Header />}
ListFooterComponent={<Footer />}
ListEmptyComponent={<EmptyState />}
onEndReached={loadMore}
onEndReachedThreshold={0.3}
getItemLayout={(data, index) => ({
length: ITEM_HEIGHT,
offset: ITEM_HEIGHT * index,
index,
})}
initialNumToRender={10}
maxToRenderPerBatch={10}
windowSize={5}
/>
// SectionList: grouped list with section headers
<SectionList
sections={[
{ title: 'A', data: ['Alice', 'Andrew'] },
{ title: 'B', data: ['Bob', 'Beth'] },
]}
keyExtractor={(item, index) => item + index}
renderItem={({ item }) => <Text>{item}</Text>}
renderSectionHeader={({ section: { title } }) => (
<Text style={styles.header}>{title}</Text>
)}
stickySectionHeadersEnabled
/>
Q10. How does the Animated API work? Medium
import { Animated, Easing } from 'react-native'
import { useRef, useEffect } from 'react'
function FadeIn({ children }) {
const opacity = useRef(new Animated.Value(0)).current
const translateY = useRef(new Animated.Value(20)).current
useEffect(() => {
Animated.parallel([
Animated.timing(opacity, {
toValue: 1,
duration: 400,
easing: Easing.out(Easing.cubic),
useNativeDriver: true, // runs on UI thread, not JS
}),
Animated.timing(translateY, {
toValue: 0,
duration: 400,
useNativeDriver: true,
}),
]).start()
}, [])
return (
<Animated.View style={{ opacity, transform: [{ translateY }] }}>
{children}
</Animated.View>
)
}
useNativeDriver: true offloads the animation to the native UI thread, preventing JS thread jank. Only works with transform and opacity (not layout properties like width/height).
Q11. What is Reanimated 3 and why is it preferred over the Animated API? Advanced
React Native Reanimated runs animations entirely on the UI thread using worklets (small JS functions that run in a separate JS runtime on the native side).
import Animated, {
useSharedValue,
useAnimatedStyle,
withSpring,
withTiming,
interpolate,
Extrapolation,
} from 'react-native-reanimated'
import { Gesture, GestureDetector } from 'react-native-gesture-handler'
function SwipeableCard() {
const translateX = useSharedValue(0)
const gesture = Gesture.Pan()
.onUpdate((event) => {
translateX.value = event.translationX // runs on UI thread
})
.onEnd(() => {
translateX.value = withSpring(0) // spring back
})
const animatedStyle = useAnimatedStyle(() => ({
transform: [{ translateX: translateX.value }],
opacity: interpolate(
Math.abs(translateX.value),
[0, 150],
[1, 0.5],
Extrapolation.CLAMP
),
}))
return (
<GestureDetector gesture={gesture}>
<Animated.View style={[styles.card, animatedStyle]}>
<Text>Swipe me</Text>
</Animated.View>
</GestureDetector>
)
}
Reanimated advantages: 60-120fps guaranteed (no JS thread), gesture-driven animations without bridge, interpolations computed on UI thread.
Navigation
Q12. How does React Navigation work? What are the main navigator types? Medium
import { NavigationContainer } from '@react-navigation/native'
import { createNativeStackNavigator } from '@react-navigation/native-stack'
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'
import { createDrawerNavigator } from '@react-navigation/drawer'
const Stack = createNativeStackNavigator()
const Tab = createBottomTabNavigator()
const Drawer = createDrawerNavigator()
// Nested navigation
function AppNavigator() {
return (
<NavigationContainer>
<Stack.Navigator screenOptions={{ headerShown: false }}>
<Stack.Screen name="Auth" component={AuthStack} />
<Stack.Screen name="Main" component={MainTabs} />
</Stack.Navigator>
</NavigationContainer>
)
}
function MainTabs() {
return (
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Profile" component={ProfileScreen} />
</Tab.Navigator>
)
}
// Navigation hooks
import { useNavigation, useRoute } from '@react-navigation/native'
const navigation = useNavigation()
navigation.navigate('Profile', { userId: '123' })
navigation.goBack()
navigation.reset({ index: 0, routes: [{ name: 'Home' }] })
const route = useRoute()
const { userId } = route.params
Q13. How do you handle deep linking in React Native? Advanced
const linking = {
prefixes: ['myapp://', 'https://myapp.com'],
config: {
screens: {
Home: 'home',
Profile: 'profile/:userId',
Post: {
path: 'post/:id',
parse: { id: (id) => parseInt(id) }
},
},
},
}
<NavigationContainer linking={linking}>
...
</NavigationContainer>
For iOS: configure URL scheme in Info.plist and Associated Domains for universal links. For Android: configure intent filters in AndroidManifest.xml. Expo handles much of this via app.json scheme configuration.
State Management
Q14. What are the state management options for React Native? Medium
| Solution | Best for | Complexity |
|---|---|---|
| useState/useReducer | Local, simple state | Low |
| Context API | Light cross-component state | Low-Medium |
| Redux Toolkit | Complex global state, large teams | High |
| Zustand | Simple global state | Low |
| Jotai | Atomic state | Low-Medium |
| TanStack Query | Server state, caching | Medium |
| MMKV | Persistent local storage | Low |
// Zustand (recommended for most RN apps)
import { create } from 'zustand'
import { persist, createJSONStorage } from 'zustand/middleware'
import AsyncStorage from '@react-native-async-storage/async-storage'
const useStore = create(
persist(
(set, get) => ({
user: null,
token: null,
setUser: (user) => set({ user }),
logout: () => set({ user: null, token: null }),
}),
{
name: 'auth-store',
storage: createJSONStorage(() => AsyncStorage),
}
)
)
// TanStack Query for server state
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
const { data, isLoading, error } = useQuery({
queryKey: ['user', userId],
queryFn: () => fetchUser(userId),
staleTime: 5 * 60 * 1000,
})
Performance Optimization
Q15. What are the common React Native performance issues and how do you fix them? Advanced
-
JS Thread overload: heavy computation on JS thread blocks UI updates
- Fix: move to
InteractionManager.runAfterInteractions, worker isolates, or native modules
- Fix: move to
-
Unoptimized FlatList: renders too many items
- Fix:
getItemLayout(fixed height),keyExtractor,removeClippedSubviews, reducewindowSize
- Fix:
-
Memory leaks: event listeners or subscriptions not cleaned up
- Fix: cleanup in
useEffectreturn function
- Fix: cleanup in
-
Excessive re-renders: context causing full tree rerenders
- Fix:
React.memo,useMemo,useCallback, split contexts by domain
- Fix:
-
Large bundle: slow startup
- Fix: inline requires (Metro
inlineRequires), Hermes engine, remove unused native modules
- Fix: inline requires (Metro
// React.memo: prevent re-render if props unchanged
const UserRow = React.memo(({ user, onPress }) => (
<Pressable onPress={() => onPress(user.id)}>
<Text>{user.name}</Text>
</Pressable>
), (prevProps, nextProps) => prevProps.user.id === nextProps.user.id)
// useCallback: stable reference for callbacks
const handlePress = useCallback((id) => {
navigation.navigate('User', { id })
}, [navigation])
// Profiling with Flipper / Performance Monitor
// React DevTools Profiler for component render times
Q16. What is Hermes and why does React Native use it? Medium
Hermes is a JavaScript engine optimized for React Native, built by Meta. Benefits over JavaScriptCore (JSC):
- Pre-compiles JavaScript to bytecode at build time (AOT) rather than at runtime (JIT), reducing startup time
- Lower memory usage
- Deterministic garbage collector reducing GC pauses
- Smaller bundle footprint on device
- Default engine since React Native 0.70
// Check if Hermes is running
const isHermes = () => !!global.HermesInternal
console.log('Hermes:', isHermes())
Native Modules
Q17. How do you create a basic native module in React Native? Advanced
// Android: NativeCalendarModule.kt
package com.myapp
import com.facebook.react.bridge.*
class NativeCalendarModule(reactContext: ReactApplicationContext)
: ReactContextBaseJavaModule(reactContext) {
override fun getName() = "NativeCalendarModule"
@ReactMethod
fun createEvent(title: String, location: String, promise: Promise) {
try {
val eventId = createCalendarEvent(title, location)
promise.resolve(eventId)
} catch (e: Exception) {
promise.reject("CREATE_EVENT_ERROR", e.message, e)
}
}
@ReactMethod(isBlockingSynchronousMethod = true)
fun getDeviceName(): String {
return android.os.Build.MODEL
}
}
// JavaScript usage
import { NativeModules } from 'react-native'
const { NativeCalendarModule } = NativeModules
async function createEvent() {
try {
const eventId = await NativeCalendarModule.createEvent('Meeting', 'Office')
console.log('Created event:', eventId)
} catch (error) {
console.error(error)
}
}
Q18. What are Expo Modules (new Expo module API)? Advanced
Expo Modules API provides a modern, type-safe way to write native modules using Swift and Kotlin with automatic TypeScript type generation.
// Kotlin (ExampleModule.kt)
import expo.modules.kotlin.modules.Module
import expo.modules.kotlin.modules.ModuleDefinition
class ExampleModule : Module() {
override fun definition() = ModuleDefinition {
Name("Example")
Function("getValue") { return@Function "Hello from native!" }
AsyncFunction("setValueAsync") { value: String ->
// runs on background thread automatically
persistValue(value)
}
Events("onChange")
View(ExampleView::class) {
Prop("name") { view: ExampleView, prop: String ->
view.updateName(prop)
}
}
}
}
5-Question Mock Test
Q1. What is the React Native new architecture? Name and describe the three main components.
Q2. What is the difference between ScrollView and FlatList? When would you use each?
Q3. What is useNativeDriver: true in React Native Animated, and why is it important?
Q4. How do you prevent unnecessary re-renders in a React Native FlatList with complex items?
Q5. What is the difference between Expo managed workflow and bare React Native?
Answers:
A1. JSI (JavaScript Interface) replaces the async bridge with direct C++ references for synchronous native calls. Fabric is the new renderer that builds a C++ shadow tree for synchronous layout. TurboModules lazy-load native modules on demand, reducing startup time.
A2. ScrollView renders all children at once, suitable for small bounded lists. FlatList uses windowing to render only visible items, suitable for large lists. Use ScrollView for forms and short content; use FlatList for lists with many items.
A3. useNativeDriver: true offloads animation calculations to the native UI thread, bypassing the JS bridge/thread entirely. This ensures smooth 60fps animations even when the JS thread is busy. Only works with non-layout properties (opacity, transform).
A4. Wrap item component in React.memo to prevent re-render when props haven't changed. Use useCallback for renderItem and event callbacks. Provide keyExtractor. Use getItemLayout for fixed-height items to skip layout measurement.
A5. Expo managed workflow handles native code build for you via EAS Build; no Xcode/Android Studio needed; limited to Expo-supported native modules. Bare React Native gives full native code access, requires native build tooling, and supports any native module.
Frequently Asked Questions
What is the difference between React Native and Flutter?
React Native uses JavaScript/TypeScript and renders via native platform widgets (bridged via JSI). Flutter uses Dart and renders every pixel via its own engine (Skia/Impeller), bypassing platform widgets. Flutter provides more consistent cross-platform visuals; React Native leverages native OS look and feel. Both are production-ready; choice depends on team skills and design requirements.
Is Expo ready for production apps?
Yes. Expo with EAS Build, EAS Submit, and EAS Update powers many production React Native apps. The bare workflow and Expo Modules API provide full native access when needed. Candidates report that major companies use Expo in production.
What is the best navigation library for React Native?
React Navigation is the community standard and most widely used. It supports stack, tab, and drawer navigators, deep linking, and the new architecture. Expo Router (built on React Navigation) adds file-based routing similar to Next.js, which is gaining adoption for Expo projects.
What is the internal mesh of related topics?
- Flutter Interview Questions 2026 - compare cross-platform approaches (Dart/Skia vs JS/Native)
- JavaScript Interview Questions 2026 - closures, async, event loop fundamentals
- TypeScript Interview Questions 2026 - typed React Native components and native module specs
- React Interview Questions 2026 - shared React patterns (hooks, context, memo)
Methodology applied to this articlelast verified 8 Jun 2026
- No fabricated salary numbers or success rates. If we quote a range, it's sourced.
- No noun-substituted templates. This article was not generated by swapping company names in a stock prompt.
- No paid placements, sponsored coaching links, or affiliate-shilled course pushes.
Explore this topic cluster
More resources in Interview Questions
Use the category hub to browse similar questions, exam patterns, salary guides, and preparation resources related to this topic.
Paid contributor programme
Sat this this year? Share your story, earn ₹500.
First-person experience reports help future candidates prep smarter. We pay verified contributors ₹500 via UPI per accepted story - with byline.
Submit your story →Ready to practice?
Take a free timed mock test
Put what you learned into practice. Our mock tests match the 2026 pattern with timer, navigator, reveal, and score breakdown. No signup.
Start Free Mock Test →Related Articles
Airbnb Interview Questions 2026: Top Tech, HR & Behavioural Q&As for Freshers
Clearing Airbnb's fresher loop in 2026 comes down to preparing for the exact mix of questions across technical, behavioural,...
Airtel Interview Questions 2026: Top Tech, HR & Behavioural Q&As for Freshers
Clearing Airtel's fresher loop in 2026 comes down to preparing for the exact mix of questions across technical, behavioural,...
AMD Interview Questions 2026: Top Tech, HR & Behavioural Q&As for Freshers
Clearing AMD's fresher loop in 2026 comes down to preparing for the exact mix of questions across technical, behavioural,...
Atlassian Interview Questions 2026: Top Tech, HR & Behavioural Q&As for Freshers
Clearing Atlassian's fresher loop in 2026 comes down to preparing for the exact mix of questions across technical,...
Barclays Interview Questions 2026
_Last verified by [Aditya Sharma](/author/aditya-sharma/) · cross-checked against PapersAdda Hiring Pulse and...
More from PapersAdda
Accenture Interview Questions 2026 (with Answers for Freshers)
Capgemini Interview Questions 2026 (with Answers for Freshers)
HCLTech Interview Questions 2026 (TechBee + TGT, with Answers)
IBM Interview Questions 2026 (with Answers for Freshers)