🔧 Mobile
React Native Mobile Development
Last updated: 2025-09-25 12:47:03
React Native Mobile App Development
Build cross-platform mobile applications using React Native, sharing code between iOS and Android platforms.
Project Setup
# Install React Native CLI
npm install -g @react-native-community/cli
# Create new project
npx react-native init MyApp
# Or using Expo
npx create-expo-app MyApp
cd MyApp
npx expo startCore Components
import React from 'react';
import {
View,
Text,
StyleSheet,
ScrollView,
TouchableOpacity,
Image,
TextInput
} from 'react-native';
const App = () => {
return (
<ScrollView style={styles.container}>
<View style={styles.header}>
<Text style={styles.title}>Welcome to React Native</Text>
</View>
<Image
source={{uri: 'https://example.com/image.jpg'}}
style={styles.image}
/>
<TextInput
style={styles.input}
placeholder="Enter your name"
placeholderTextColor="#999"
/>
<TouchableOpacity style={styles.button}>
<Text style={styles.buttonText}>Press Me</Text>
</TouchableOpacity>
</ScrollView>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#f5f5f5',
},
header: {
padding: 20,
alignItems: 'center',
},
title: {
fontSize: 24,
fontWeight: 'bold',
color: '#333',
},
image: {
width: '100%',
height: 200,
resizeMode: 'cover',
},
input: {
margin: 20,
padding: 15,
borderWidth: 1,
borderColor: '#ddd',
borderRadius: 8,
backgroundColor: 'white',
},
button: {
margin: 20,
padding: 15,
backgroundColor: '#007bff',
borderRadius: 8,
alignItems: 'center',
},
buttonText: {
color: 'white',
fontSize: 16,
fontWeight: 'bold',
},
});Navigation with React Navigation
# Install dependencies
npm install @react-navigation/native @react-navigation/stack
npx expo install react-native-screens react-native-safe-area-context
// App.js
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import HomeScreen from './screens/HomeScreen';
import DetailScreen from './screens/DetailScreen';
const Stack = createStackNavigator();
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen
name="Home"
component={HomeScreen}
options={{ title: 'Welcome' }}
/>
<Stack.Screen
name="Details"
component={DetailScreen}
/>
</Stack.Navigator>
</NavigationContainer>
);
}State Management with Context
// contexts/AppContext.js
import React, { createContext, useContext, useReducer } from 'react';
const AppContext = createContext();
const initialState = {
user: null,
posts: [],
loading: false,
};
function appReducer(state, action) {
switch (action.type) {
case 'SET_LOADING':
return { ...state, loading: action.payload };
case 'SET_USER':
return { ...state, user: action.payload };
case 'SET_POSTS':
return { ...state, posts: action.payload };
default:
return state;
}
}
export function AppProvider({ children }) {
const [state, dispatch] = useReducer(appReducer, initialState);
return (
<AppContext.Provider value={{ state, dispatch }}>
{children}
</AppContext.Provider>
);
}
export const useApp = () => {
const context = useContext(AppContext);
if (!context) {
throw new Error('useApp must be used within AppProvider');
}
return context;
};API Integration
// services/api.js
const API_BASE = 'https://jsonplaceholder.typicode.com';
export const api = {
get: async (endpoint) => {
try {
const response = await fetch(`${API_BASE}${endpoint}`);
if (!response.ok) throw new Error('API Error');
return await response.json();
} catch (error) {
throw error;
}
},
post: async (endpoint, data) => {
try {
const response = await fetch(`${API_BASE}${endpoint}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
return await response.json();
} catch (error) {
throw error;
}
},
};
// Using the API in a component
import { useEffect, useState } from 'react';
import { api } from '../services/api';
function PostsList() {
const [posts, setPosts] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
loadPosts();
}, []);
const loadPosts = async () => {
try {
const data = await api.get('/posts');
setPosts(data);
} catch (error) {
console.error('Error loading posts:', error);
} finally {
setLoading(false);
}
};
return (
// JSX for rendering posts
);
}