# Top 30 React Native Interview Fragen: Vollständiger Leitfaden 2026 > Die 30 häufigsten React Native Interview Fragen. Detaillierte Antworten mit Code-Beispielen, um den Job als Mobile Developer zu sichern. - Published: 2026-02-01 - Updated: 2026-04-27 - Author: SharpSkill - Tags: react native interview, mobile interview, react native questions, javascript, technical interview - Reading time: 20 min --- Technische Interviews zu React Native prüfen plattformübergreifende mobile Entwicklungskenntnisse, iOS- und Android-Spezifika sowie Performance-Muster. Dieser Leitfaden behandelt die 30 am häufigsten gestellten Fragen mit detaillierten Antworten und Code-Beispielen für eine effektive Vorbereitung. > **Hinweis zur Vorbereitung** > > Diese Fragen reichen von Grundlagen bis zu fortgeschrittenen Konzepten. Die Beherrschung der React-Native-Architektur und das Verständnis der Unterschiede zu React Web sind entscheidend für den Interviewerfolg. ## React Native Grundlagen ### 1. Was ist der Unterschied zwischen React und React Native? React ist eine Bibliothek zum Erstellen von Web-Oberflächen, während React Native die native Entwicklung mobiler Apps für iOS und Android ermöglicht. Der fundamentale Unterschied liegt im Rendering: React verwendet ein Virtual DOM, das in HTML-Elemente übersetzt wird, während React Native eine Bridge nutzt, die mit nativen Komponenten der jeweiligen Plattform kommuniziert. ```jsx // React (Web) - uses HTML elements function WebComponent() { return (
Web text
) } // React Native - uses native components import { View, Text, TouchableOpacity, StyleSheet } from 'react-native' function NativeComponent() { return ( Native text Press ) } const styles = StyleSheet.create({ container: { flex: 1, padding: 16 } }) ``` React-Native-Komponenten werden auf iOS zu UIView und auf Android zu android.view, was native Performance liefert. ### 2. Wie funktioniert die Architektur von React Native? React Native nutzt eine dreischichtige Architektur: JavaScript, Bridge (oder JSI in der neuen Architektur) und Native. JavaScript-Code läuft in einer JS-Engine (Hermes oder JavaScriptCore). Die Kommunikation mit nativem Code erfolgt in der alten Architektur über JSON-Serialisierung und in der neuen Architektur über JSI (JavaScript Interface). ```jsx // Old architecture: asynchronous communication via Bridge // The Bridge serializes messages as JSON between JS and Native // New architecture (Fabric + TurboModules) // JSI enables synchronous direct calls to native modules // Example TurboModule usage import { TurboModuleRegistry } from 'react-native' // Synchronous access to native module const DeviceInfo = TurboModuleRegistry.get('DeviceInfo') const deviceName = DeviceInfo.getDeviceName() // Synchronous call // With Fabric, rendering is smoother // Components can be created synchronously // Reducing jank during animations ``` Die neue Architektur verbessert die Performance erheblich, da JSON-Serialisierung entfällt und synchrone Aufrufe möglich werden. ### 3. Was ist der Metro Bundler? Metro ist der von React Native verwendete JavaScript-Bundler. Er verwandelt Quellcode in ein für die mobile Ausführung optimiertes Bundle. Metro übernimmt die Modulauflösung, die Code-Transformation (über Babel) und Hot Reloading während der Entwicklung. ```javascript // metro.config.js const { getDefaultConfig } = require('expo/metro-config') const config = getDefaultConfig(__dirname) // Custom configuration config.resolver.assetExts.push('db') // Add extensions config.resolver.sourceExts.push('cjs') // CommonJS support // Transformer configuration config.transformer.babelTransformerPath = require.resolve( 'react-native-svg-transformer' ) // Production optimizations config.transformer.minifierConfig = { keep_classnames: true, keep_fnames: true, mangle: { keep_classnames: true, keep_fnames: true } } module.exports = config ``` Metro unterstützt Fast Refresh und ermöglicht damit sofortige Änderungen ohne Verlust des Anwendungszustands. ### 4. Erkläre StyleSheet.create und seine Vorteile `StyleSheet.create` optimiert Styles, indem es sie validiert und in numerische Referenzen umwandelt, was den Bridge-Overhead reduziert. ```jsx // ❌ Inline styles - recreated on every render function BadExample() { return ( Title ) } // ✅ StyleSheet.create - optimized and validated const styles = StyleSheet.create({ container: { flex: 1, padding: 16, backgroundColor: '#fff' }, title: { fontSize: 18, fontWeight: 'bold' }, // Style composition row: { flexDirection: 'row', alignItems: 'center', gap: 8 } }) function GoodExample() { return ( Title {/* Style combination */} Content ) } // StyleSheet.absoluteFillObject for absolute positioning const overlayStyles = StyleSheet.create({ overlay: { ...StyleSheet.absoluteFillObject, backgroundColor: 'rgba(0,0,0,0.5)' } }) ``` ### 5. Was ist der Unterschied zwischen Web-Flexbox und React Native? React Native nutzt Flexbox, jedoch mit anderen Standardwerten als das Web, angepasst an vertikale mobile Oberflächen. ```jsx // Key differences from web const styles = StyleSheet.create({ container: { // flexDirection: 'column' by default (vs 'row' on web) // alignItems: 'stretch' by default flex: 1 }, // React Native Flexbox row: { flexDirection: 'row', // Horizontal justifyContent: 'space-between', // Main axis alignItems: 'center', // Cross axis flexWrap: 'wrap', // Line wrapping gap: 8 // Supported since RN 0.71 }, // Flex grow/shrink flexItem: { flex: 1, // Equivalent to flex: 1 1 0 flexGrow: 1, // Grow to fill flexShrink: 0, // Don't shrink flexBasis: 100 // Base size }, // Absolute positioning absolute: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 } }) // Practical example: card with image and content function Card() { return ( Title Description ) } const cardStyles = StyleSheet.create({ container: { flexDirection: 'row', backgroundColor: '#fff', borderRadius: 8, overflow: 'hidden' }, image: { width: 100, height: 100 }, content: { flex: 1, // Takes remaining space padding: 12, justifyContent: 'center' }, title: { fontSize: 16, fontWeight: '600' }, description: { fontSize: 14, color: '#666' } }) ``` ## Navigation und Komponenten ### 6. Wie implementiert man Navigation mit React Navigation? React Navigation ist die Standardlösung für Navigation in React Native. Sie bietet verschiedene Navigator-Typen, die zu mobilen Mustern passen. ```jsx // Installing dependencies // npm install @react-navigation/native @react-navigation/native-stack // npm install react-native-screens react-native-safe-area-context import { NavigationContainer } from '@react-navigation/native' import { createNativeStackNavigator } from '@react-navigation/native-stack' import { createBottomTabNavigator } from '@react-navigation/bottom-tabs' // TypeScript typing for navigation params type RootStackParamList = { Home: undefined Profile: { userId: string } Settings: { section?: string } } const Stack = createNativeStackNavigator() const Tab = createBottomTabNavigator() // Tab navigation function TabNavigator() { return ( ({ tabBarIcon: ({ focused, color, size }) => { // Dynamic icon based on tab const iconName = route.name === 'Home' ? 'home' : 'settings' return }, tabBarActiveTintColor: '#007AFF', tabBarInactiveTintColor: 'gray' })} > ) } // Stack navigation function App() { return ( ({ title: `Profile ${route.params.userId}` })} /> ) } ``` ### 7. Wie verwaltet man performante Listen mit FlatList? `FlatList` ist für lange Listen mit automatischer Virtualisierung optimiert und rendert nur sichtbare Elemente. ```jsx import { FlatList, RefreshControl } from 'react-native' function ProductList() { const [products, setProducts] = useState([]) const [refreshing, setRefreshing] = useState(false) const [loading, setLoading] = useState(false) // Initial loading const fetchProducts = async (page = 1) => { const response = await api.getProducts(page) return response.data } // Pull-to-refresh const onRefresh = useCallback(async () => { setRefreshing(true) const data = await fetchProducts(1) setProducts(data) setRefreshing(false) }, []) // Infinite pagination const loadMore = useCallback(async () => { if (loading) return setLoading(true) const nextPage = Math.ceil(products.length / 20) + 1 const data = await fetchProducts(nextPage) setProducts(prev => [...prev, ...data]) setLoading(false) }, [products.length, loading]) // Item rendering const renderItem = useCallback(({ item }) => ( ), []) // Key extraction const keyExtractor = useCallback((item) => item.id.toString(), []) // Item separator const ItemSeparator = useCallback(() => ( ), []) return ( } // Infinite pagination onEndReached={loadMore} onEndReachedThreshold={0.5} ListFooterComponent={loading ? : null} // Empty list ListEmptyComponent={} /> ) } ``` > **FlatList Optimierung** > > Memoisiere `renderItem` immer mit `useCallback` und lagere schwere Komponenten aus. Vermeide Inline-Funktionen in `renderItem`, die unnötige Re-Renders auslösen. ### 8. Was ist der Unterschied zwischen TouchableOpacity, Pressable und TouchableHighlight? Diese Komponenten verarbeiten Touch-Interaktionen mit unterschiedlichem visuellen Feedback. ```jsx import { TouchableOpacity, TouchableHighlight, Pressable, StyleSheet } from 'react-native' function InteractionExamples() { return ( {/* TouchableOpacity: reduces opacity on touch */} console.log('Pressed')} style={styles.button} > TouchableOpacity {/* TouchableHighlight: adds background color */} console.log('Pressed')} style={styles.button} > TouchableHighlight {/* Pressable: modern API with more control */} console.log('Pressed')} onLongPress={() => console.log('Long press')} delayLongPress={500} style={({ pressed }) => [ styles.button, pressed && styles.buttonPressed ]} > {({ pressed }) => ( {pressed ? 'Pressed!' : 'Pressable'} )} {/* Pressable with hitSlop to enlarge touch area */} console.log('Pressed')} style={styles.smallButton} > Small button ) } const styles = StyleSheet.create({ container: { gap: 16, padding: 20 }, button: { backgroundColor: '#007AFF', padding: 16, borderRadius: 8, alignItems: 'center' }, buttonPressed: { backgroundColor: '#0056b3', transform: [{ scale: 0.98 }] }, textPressed: { color: '#fff' }, smallButton: { padding: 8, backgroundColor: '#eee' } }) ``` Für neue Projekte wird `Pressable` empfohlen, da es mehr Kontrolle und eine konsistentere API bietet. ### 9. Wie erstellt man flüssige Animationen? React Native bietet mehrere Animations-APIs: Animated (eingebaut) und Reanimated (performanter). ```jsx import { Animated, Easing } from 'react-native' import Reanimated, { useSharedValue, useAnimatedStyle, withSpring, withTiming } from 'react-native-reanimated' // Animation with Animated (native API) function FadeInView({ children }) { const fadeAnim = useRef(new Animated.Value(0)).current useEffect(() => { Animated.timing(fadeAnim, { toValue: 1, duration: 500, easing: Easing.ease, useNativeDriver: true // Performant on UI thread }).start() }, []) return ( {children} ) } // Animation with Reanimated (recommended for complex animations) function BouncyButton() { const scale = useSharedValue(1) const animatedStyle = useAnimatedStyle(() => ({ transform: [{ scale: scale.value }] })) const handlePressIn = () => { scale.value = withSpring(0.95, { damping: 10, stiffness: 400 }) } const handlePressOut = () => { scale.value = withSpring(1, { damping: 10, stiffness: 400 }) } return ( Press ) } // List animation with LayoutAnimation import { LayoutAnimation, UIManager, Platform } from 'react-native' // Enable on Android if (Platform.OS === 'android') { UIManager.setLayoutAnimationEnabledExperimental?.(true) } function AnimatedList() { const [items, setItems] = useState([]) const addItem = () => { // Configure animation before state change LayoutAnimation.configureNext(LayoutAnimation.Presets.spring) setItems(prev => [...prev, { id: Date.now() }]) } const removeItem = (id) => { LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut) setItems(prev => prev.filter(item => item.id !== id)) } return (