React Native Developer Certification — Questions and Answers
Question 1: A React Native app crashes on Android 12+ but works on older versions. What risk factor should be assessed first?
- JavaScript engine version incompatibility in the Metro bundler
- React Navigation version not supporting gesture handler
- Hermes engine not supporting ES2021 syntax
- New Android 12 behavioral changes (e.g., exact alarms, exported component flags) affecting native modules (Correct answer)
Correct answer: New Android 12 behavioral changes (e.g., exact alarms, exported component flags) affecting native modules
Android 12 introduced strict enforcement of manifest flags like `android:exported`, causing crashes in apps with unupdated native modules.
Question 2: Google Play requires that apps offering in-app subscriptions must clearly disclose which of the following before the user commits to purchase?
- The subscription tier names only
- The developer's registered business address
- Price, billing period, and how to cancel (Correct answer)
- The app's privacy policy URL only
Correct answer: Price, billing period, and how to cancel
Google Play billing policies mandate that subscription apps clearly display price, billing frequency, and cancellation instructions prior to purchase.
Question 3: Which strategy best mitigates the risk of a bad OTA (Over-The-Air) JavaScript update breaking production users?
- Requiring users to manually approve each update
- Disabling OTA updates entirely in production
- Using synchronous update checks on every app launch
- Staged rollouts with automatic rollback on crash-rate threshold (Correct answer)
Correct answer: Staged rollouts with automatic rollback on crash-rate threshold
Staged rollouts let you limit exposure, and automatic rollback based on crash rates limits blast radius if an update is broken.
Question 4: How do you go back to the previous screen programmatically in React Navigation?
- navigation.back()
- navigation.previous()
- navigation.goBack() (Correct answer)
- navigation.pop()
Correct answer: navigation.goBack()
navigation.goBack() navigates to the previous screen in the stack, equivalent to pressing the hardware back button.
Question 5: What is the purpose of the useFocusEffect hook in React Navigation?
- To track user attention metrics
- To set screen focus styles
- To focus a TextInput on mount
- To run effects when a screen gains or loses focus (Correct answer)
Correct answer: To run effects when a screen gains or loses focus
useFocusEffect runs a callback when the screen comes into focus and optionally cleans up when it loses focus.
Question 6: Which React Navigation hook gives access to the navigation object inside a component?
- useNavigation (Correct answer)
- useRoute
- useNavigate
- useNavigator
Correct answer: useNavigation
useNavigation hook returns the navigation prop, allowing any component in the tree to trigger navigation actions without prop drilling.
Question 7: What threat does certificate pinning in a React Native app protect against?
- Man-in-the-middle attacks that use a trusted CA-signed certificate to intercept HTTPS traffic (Correct answer)
- Unauthorized OTA updates pushed to the JS bundle
- DNS hijacking of the app's crash reporting endpoint
- Expired SSL certificates causing app crashes
Correct answer: Man-in-the-middle attacks that use a trusted CA-signed certificate to intercept HTTPS traffic
Certificate pinning validates the server's certificate against a hardcoded fingerprint, blocking MITM attacks even with rogue trusted CAs.
Question 8: Based on empirical reports from React Native teams, what is the most common root cause of the 'white screen of death' (blank screen on launch)?
- Incorrect entry point in package.json
- A JavaScript error thrown synchronously during app initialization before the error boundary renders (Correct answer)
- Missing splash screen configuration
- Missing fonts causing render failure
Correct answer: A JavaScript error thrown synchronously during app initialization before the error boundary renders
Synchronous JS errors during initialization crash the JS runtime before any UI renders, resulting in a blank white screen; adding a global error boundary and logging catches these.
Question 9: A ride-sharing app needs to animate a car icon moving smoothly along a route on a map. Which API should drive the animation?
- LayoutAnimation.configureNext before each coordinate update
- setState called in a requestAnimationFrame loop
- CSS transitions via inline styles
- Animated.timing with useNativeDriver: true on coordinate values (Correct answer)
Correct answer: Animated.timing with useNativeDriver: true on coordinate values
Animated.timing with useNativeDriver offloads animation frames to the native thread, ensuring smooth 60fps motion without JS-thread involvement.
Question 10: How do you access parameters passed to a screen in React Navigation?
- route.params (Correct answer)
- props.params
- this.props.navigation.state.params
- navigation.params
Correct answer: route.params
Parameters passed during navigation are accessed via the route.params object, which is provided as a prop to screen components.
Question 11: Which hook from Redux Toolkit allows a component to read from the Redux store?
- useSelector (Correct answer)
- useState
- useStore
- useRedux
Correct answer: useSelector
useSelector subscribes a component to the Redux store and returns the selected slice of state, re-rendering when that slice changes.
Question 12: Which approach best prevents flakiness in Detox E2E tests that involve animations?
- Increase timeouts to wait for animations
- Disable animations via UIManager in test builds (Correct answer)
- Use jest.runAllTimers() to skip animations
- Reduce animation duration to 1ms in JS
Correct answer: Disable animations via UIManager in test builds
Setting UIManager.setLayoutAnimationEnabledExperimental(false) or disabling animations in native test builds eliminates animation-related timing flakiness.
Question 13: What does App Transport Security (ATS) enforce by default in iOS React Native apps?
- OAuth 2.0 for all API calls
- Certificate pinning for all domains
- HTTPS connections for all network requests (Correct answer)
- End-to-end encryption for AsyncStorage
Correct answer: HTTPS connections for all network requests
ATS enforces HTTPS (TLS) connections for all network requests in iOS apps by default, blocking plain HTTP.
Question 14: What is the recommended way to securely store sensitive data like API tokens in a React Native app?
- A hardcoded constant in a .env file bundled with the app
- AsyncStorage with AES encryption applied in JavaScript
- The app's SQLite database with WAL mode enabled
- expo-secure-store or react-native-keychain, which use the OS keystore/keychain (Correct answer)
Correct answer: expo-secure-store or react-native-keychain, which use the OS keystore/keychain
expo-secure-store and react-native-keychain store secrets in iOS Keychain or Android Keystore, which are hardware-backed secure enclaves.
Question 15: How do you listen for navigation events like blur and focus on a screen?
- Using navigation.addListener() (Correct answer)
- Using useNavigationEvents()
- Using onScreenChange prop
- Using navigation.listen()
Correct answer: Using navigation.addListener()
navigation.addListener() subscribes to navigation events such as focus, blur, and state, returning an unsubscribe function.
Question 16: A food delivery app must show the user's live location on a map updating every 3 seconds. What is the best approach?
- Fetch location from a REST API every 3 seconds
- Use Geolocation.watchPosition and update state on each callback (Correct answer)
- Use BackgroundFetch to poll location in a background task
- Call Geolocation.getCurrentPosition inside a setInterval
Correct answer: Use Geolocation.watchPosition and update state on each callback
watchPosition streams continuous location updates and is more battery-efficient than polling with setInterval.
Question 17: What does the `Pressable` component offer that `TouchableOpacity` does not?
- Automatic debouncing of rapid taps
- Built-in accessibility roles without extra props
- Granular pressed-state styling, hit slop configuration, and ripple effects via the style callback (Correct answer)
- Cross-platform gesture recognition with velocity tracking
Correct answer: Granular pressed-state styling, hit slop configuration, and ripple effects via the style callback
Pressable accepts a style function with a pressed argument, enabling fine-grained control over appearance on press, along with configurable hit areas.
Question 18: What is the role of `@testing-library/jest-native` in React Native testing?
- It generates accessibility reports from test output
- It extends Jest with custom matchers like toBeVisible() and toHaveTextContent() (Correct answer)
- It runs tests on actual iOS and Android devices
- It provides native module mocks for common packages
Correct answer: It extends Jest with custom matchers like toBeVisible() and toHaveTextContent()
@testing-library/jest-native adds semantic Jest matchers tailored to React Native elements, making assertions more expressive and readable.
Question 19: What is the risk of using `InteractionManager.runAfterInteractions` incorrectly when navigating between heavy screens?
- Metro hot reload is disabled while InteractionManager has pending callbacks
- The callback is never executed if the component unmounts before navigation completes
- InteractionManager blocks the native UI thread on Android
- If not properly queued, expensive operations can still run during the navigation animation, causing jank (Correct answer)
Correct answer: If not properly queued, expensive operations can still run during the navigation animation, causing jank
Work queued before the current interaction (animation) completes still runs during it; ensure you register the task after the interaction start event.
Question 20: What is the purpose of the `useNativeDriver: true` option in Animated API calls?
- Forces synchronous animation updates
- Enables hardware GPU rendering for all components
- Disables JS-side animation calculations entirely
- Runs animations on the native thread instead of the JS thread (Correct answer)
Correct answer: Runs animations on the native thread instead of the JS thread
useNativeDriver: true offloads animation execution to the native thread, preventing JS thread jank and producing smoother animations.
Question 21: How do React Native professionals establish measurable quality objectives?
- By comparing to competitors only
- By defining specific, measurable, achievable, relevant, and time-bound quality targets (Correct answer)
- Using vague goals
- Through subjective assessment
Correct answer: By defining specific, measurable, achievable, relevant, and time-bound quality targets
This is fundamental to React Native practice. By defining specific, measurable, achievable, relevant, and time-bound quality targets represents the professional standard for quality in the React Native certification framework.
Question 22: When estimating a React Native feature involving a new native module, a professional developer should:
- Refuse to estimate until the native module is fully built
- Give the same estimate as a pure JS feature
- Add a fixed 10% buffer to any estimate
- Include a spike/research phase to assess native bridging complexity before committing (Correct answer)
Correct answer: Include a spike/research phase to assess native bridging complexity before committing
A spike phase lets the team discover unknown native complexities before committing to a timeline, improving estimate accuracy.
Question 23: A React Native team skips end-to-end testing and relies only on manual QA before releases. Which risk management framework concept does this violate?
- The principle of least privilege for app permissions
- OWASP Mobile Top 10 requirement for automated scanning
- Risk mitigation through automated controls — manual-only QA is a detective control with high human error probability (Correct answer)
- Continuous integration gate requirements for native builds
Correct answer: Risk mitigation through automated controls — manual-only QA is a detective control with high human error probability
Automated E2E tests are a preventive control that catches regressions consistently; manual QA alone is a weak detective control prone to human error and coverage gaps.
Question 24: A photo-sharing app uploads images to S3. Large uploads fail on slow connections. What technique improves reliability?
- Use multipart/chunked upload with retry logic per chunk (Correct answer)
- Switch from fetch to XMLHttpRequest
- Compress images client-side before uploading
- Increase the fetch timeout to 120 seconds
Correct answer: Use multipart/chunked upload with retry logic per chunk
Multipart chunked uploads allow retrying only failed chunks rather than restarting the entire upload on connection drops.
Question 25: A React Native team stores API keys directly in their JavaScript source code. What is the correct risk mitigation?
- Use Base64 encoding to prevent key extraction from the bundle
- Obfuscate the source code with ProGuard to hide the keys
- Store keys in AsyncStorage populated at first launch
- Move secrets to environment variables loaded via react-native-config or a secrets manager, never bundle them in JS (Correct answer)
Correct answer: Move secrets to environment variables loaded via react-native-config or a secrets manager, never bundle them in JS
Bundled JavaScript can be extracted from any APK/IPA, so API keys must live server-side or in secure environment configs, not in the JS bundle.
Question 26: What is reflective practice in React Native professional development?
- Writing personal diaries
- Only reflecting on successes
- Systematically examining experiences to gain insight and improve future practice (Correct answer)
- Avoiding past mistakes
Correct answer: Systematically examining experiences to gain insight and improve future practice
This is fundamental to React Native practice. Systematically examining experiences to gain insight and improve future practice represents the professional standard for practical in the React Native certification framework.
Question 27: Which Metro bundler flag lets you start the packager on a custom port?
- --listen
- --server-port
- --port (Correct answer)
- --rn-port
Correct answer: --port
Running `npx react-native start --port 8082` starts Metro on a non-default port.
Question 28: Based on React Native documentation and community research, what is the recommended approach for handling different screen sizes and densities?
- Use Flexbox layout with percentage-based dimensions (Correct answer)
- Use Dimensions API values divided by a fixed constant
- Hardcode pixel values for each target device resolution
- Scale all styles using a custom PixelRatio utility
Correct answer: Use Flexbox layout with percentage-based dimensions
Flexbox is React Native's built-in, cross-platform layout system designed to adapt to varying screen sizes without requiring hardcoded dimensions.
Question 29: During a stakeholder demo, a critical React Native feature crashes on stage. How should you handle the communication in the moment?
- End the meeting immediately
- Apologize repeatedly without offering any alternative or next steps
- Acknowledge the crash calmly, switch to a backup scenario or screen recording, and commit to a follow-up with root cause and fix timeline (Correct answer)
- Blame the device or the network and move on without acknowledging the crash
Correct answer: Acknowledge the crash calmly, switch to a backup scenario or screen recording, and commit to a follow-up with root cause and fix timeline
Staying calm, pivoting to a backup, and committing to a follow-up preserves credibility and demonstrates professionalism under pressure.
Question 30: Which practice best demonstrates professional version control discipline in a React Native project?
- Avoiding branches to keep history linear
- Committing small, logically atomic changes with descriptive messages that explain why the change was made (Correct answer)
- Force-pushing to main when needed to clean history
- Committing large batches of changes at the end of the week
Correct answer: Committing small, logically atomic changes with descriptive messages that explain why the change was made
Small atomic commits with clear 'why' messages make code review, bisecting, and reverting straightforward.
Question 31: What does the headerShown option control in a Stack Navigator screen?
- Whether back button text is visible
- Whether the navigation header bar is displayed (Correct answer)
- Whether the screen title is shown
- Whether the status bar is visible
Correct answer: Whether the navigation header bar is displayed
Setting headerShown: false in screen options hides the entire navigation header bar for that screen.
React Native Developer Certification
Validates proficiency in building cross-platform mobile applications with React Native, covering core components, navigation, state management, performance optimization, and practical application development.
Exam Rules
- You can skip questions and return to them later
- Flag questions for review before submitting
- No feedback shown until you submit the entire exam
- Unanswered questions count as wrong — answer everything
- 10 pretest questions are mixed in and don't affect your score
- Timer auto-submits when time runs out
- Your progress is auto-saved every 30 seconds