التنقل بين الشاشات — أساسيات React Native
التنقل في React Native
React Navigation
هي المكتبة الأشهر للتنقل في React Native.
التثبيت
npm install @react-navigation/native
npm install @react-navigation/native-stack
npm install react-native-screens react-native-safe-area-context1. Stack Navigation (التنقل العمودي)
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
const Stack = createNativeStackNavigator();
function App() {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen
name="Home"
component={HomeScreen}
options={{ title: 'الرئيسية' }}
/>
<Stack.Screen
name="Details"
component={DetailsScreen}
options={{ title: 'التفاصيل' }}
/>
</Stack.Navigator>
</NavigationContainer>
);
}
// التنقل
function HomeScreen({ navigation }) {
return (
<TouchableOpacity onPress={() => navigation.navigate('Details')}>
<Text>اذهب للتفاصيل</Text>
</TouchableOpacity>
);
}
// تمرير بيانات
navigation.navigate('Details', { itemId: 123, name: 'منتج' });
// استقبال البيانات
function DetailsScreen({ route }) {
const { itemId, name } = route.params;
return <Text>المنتج: {name} - ID: {itemId}</Text>;
}2. Tab Navigation (التنقل بالتبويبات)
npm install @react-navigation/bottom-tabsimport { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { Ionicons } from '@expo/vector-icons';
const Tab = createBottomTabNavigator();
function App() {
return (
<NavigationContainer>
<Tab.Navigator
screenOptions={({ route }) => ({
tabBarIcon: ({ focused, color, size }) => {
let iconName;
if (route.name === 'Home') {
iconName = focused ? 'home' : 'home-outline';
} else if (route.name === 'Profile') {
iconName = focused ? 'person' : 'person-outline';
}
return <Ionicons name={iconName} size={size} color={color} />;
},
tabBarActiveTintColor: '#3b82f6',
tabBarInactiveTintColor: '#888',
})}
>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Profile" component={ProfileScreen} />
</Tab.Navigator>
</NavigationContainer>
);
}3. Drawer Navigation (القائمة الجانبية)
npm install @react-navigation/drawerimport { createDrawerNavigator } from '@react-navigation/drawer';
const Drawer = createDrawerNavigator();
function App() {
return (
<NavigationContainer>
<Drawer.Navigator>
<Drawer.Screen name="Home" component={HomeScreen} />
<Drawer.Screen name="Settings" component={SettingsScreen} />
</Drawer.Navigator>
</NavigationContainer>
);
}
// فتح القائمة
navigation.openDrawer();
navigation.closeDrawer();
navigation.toggleDrawer();دوال التنقل المهمة
// داخل أي شاشة: navigation يصل كـ prop (أو من الخطاف useNavigation())
function NavigationExamples({ navigation }) {
// التنقل لشاشة
navigation.navigate('ScreenName');
// التنقل مع بيانات
navigation.navigate('ScreenName', { id: 1 });
// الرجوع
navigation.goBack();
// إضافة شاشة للمكدس
navigation.push('ScreenName');
// استبدال الشاشة الحالية
navigation.replace('ScreenName');
// الرجوع للشاشة الرئيسية
navigation.popToTop();
// إعادة ضبط التنقل
navigation.reset({
index: 0,
routes: [{ name: 'Home' }],
});
}تخصيص Header
<Stack.Screen
name="Home"
component={HomeScreen}
options={{
title: 'الرئيسية',
headerStyle: { backgroundColor: '#3b82f6' },
headerTintColor: '#fff',
headerTitleStyle: { fontWeight: 'bold' },
headerRight: () => (
<TouchableOpacity onPress={() => alert('!')}>
<Ionicons name="settings" size={24} color="#fff" />
</TouchableOpacity>
),
}}
/>اختبر فهمك