Using native modules in React Native apps helps keep the app smooth and fast. Native code runs directly on the device's hardware, so it can handle heavy tasks like camera access, sensors, or complex calculations without slowing down the user interface. This helps maintain a steady 60 frames per second (fps) for smooth animations and interactions. It also reduces battery drain because native code is more efficient than JavaScript for certain operations.
Why native modules extend capabilities in React Native - Publishing Best Practices
To keep your app running at 60fps, use native modules only for tasks that need direct hardware access or high performance. Avoid doing heavy work in JavaScript when native code can do it faster. Also, minimize the communication between JavaScript and native code because crossing this bridge too often can cause delays. Batch calls and use asynchronous methods to keep the UI thread free.
Adding native modules increases your app's binary size because you include extra native code libraries. This can add a few megabytes depending on the module. However, this trade-off is usually worth it for better performance and access to device features. To reduce startup time, load native modules lazily only when needed instead of at app launch.
On iOS, native modules are written in Swift or Objective-C and integrate with React Native via Objective-C bridges. On Android, native modules use Java or Kotlin and connect through Java bridges. Both platforms require proper setup and permissions for hardware access. iOS apps need code signing and provisioning profiles for native modules, while Android apps require signing with a keystore. The review process for native code can be stricter on iOS, so test carefully.
- Ensure native modules do not access private APIs or restricted device features.
- Request only necessary permissions and explain their use clearly to users.
- Follow Apple's Human Interface Guidelines and Google's Material Design for UI consistency.
- Test for crashes and memory leaks caused by native code to avoid rejection.
- Sign your app properly with valid certificates and keys for both platforms.
Your app takes 5 seconds to load this screen. What's likely wrong?
- You might be calling native modules synchronously on the main thread, blocking UI rendering.
- Too many bridge calls between JavaScript and native code causing delays.
- Loading large native libraries at startup instead of on demand.
Practice
Solution
Step 1: Understand React Native limitations
JavaScript in React Native cannot access all device hardware or native libraries directly.Step 2: Role of native modules
Native modules bridge JavaScript with native platform code to access those features.Final Answer:
To access device features not available in JavaScript -> Option DQuick Check:
Native modules = access device features [OK]
- Thinking native modules replace JavaScript code
- Believing native modules slow down the app
- Assuming native modules are optional for all features
Solution
Step 1: Recall React Native import syntax
NativeModules is a named export from 'react-native', so it must be imported with curly braces.Step 2: Check each option
import { NativeModules } from 'react-native'; uses correct syntax with curly braces; others are incorrect or invalid module names.Final Answer:
import { NativeModules } from 'react-native'; -> Option AQuick Check:
Correct import uses curly braces [OK]
- Omitting curly braces for named imports
- Using wrong module names
- Using require without assignment
import { NativeModules } from 'react-native';
const { DeviceInfo } = NativeModules;
DeviceInfo.getDeviceName((name) => {
console.log('Device:', name);
});Solution
Step 1: Understand native module callback
The native module 'DeviceInfo' calls the callback with the device name 'Pixel 5'.Step 2: Check console.log output
The callback logs 'Device: Pixel 5' to the console.Final Answer:
Device: Pixel 5 -> Option AQuick Check:
Callback logs device name correctly [OK]
- Assuming synchronous return instead of callback
- Expecting undefined if native module not linked
- Confusing function names or parameters
TypeError: NativeModules.CameraModule.getPicture is not a function. What is the most likely cause?Solution
Step 1: Analyze the error message
The error says the function does not exist on the native module object.Step 2: Understand native module linking
If the native module is not linked or registered correctly, its functions won't be available in JavaScript.Final Answer:
The native module is not properly linked or registered -> Option CQuick Check:
Linking issues cause missing native functions [OK]
- Assuming import errors cause this
- Ignoring native build steps
- Confusing variable names with linking problems
Solution
Step 1: Identify biometric sensor access needs
Biometric sensors require native platform APIs not accessible directly from JavaScript.Step 2: Choose the correct integration method
Native modules bridge JavaScript with native biometric APIs for secure and efficient access.Step 3: Evaluate other options
JavaScript alone or WebView cannot access biometric hardware securely or at all.Final Answer:
Use a native module to connect JavaScript with the platform's biometric API -> Option BQuick Check:
Native modules enable hardware access [OK]
- Trying to access hardware only with JavaScript
- Ignoring security and platform API requirements
- Using WebView for native hardware access
Ready to prove it?
Pass the test and this pattern moves unknown
