التنقل باستخدام Expo Router
أعدّ Expo Router للتنقل المستند إلى الملفات مع مسارات محددة النوع وروابط عميقة.
التنقل باستخدام Expo Router درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
ما هو Expo Router؟
Expo Router هي مكتبة للتوجيه القائم على الملفات في React Native (ومبنية على React Navigation). وكما هو الحال في App Router ضمن Next.js، تحدد بنية الملفات مسارات التنقل.
التثبيت
أنشئ مشروع Expo جديدًا مع إعداد Expo Router مسبقًا.
# Create new project:
npx create-expo-app@latest my-app --template tabs
# Or add to existing Expo project:
npx expo install expo-router react-native-safe-area-context react-native-screensالمسارات القائمة على الملفات
تصبح الملفات الموجودة في المجلد app/ مسارات تلقائيًا. يمثّل index.tsx المسار الجذري، بينما يمثّل [id].tsx مقطعًا ديناميكيًا.
app/
_layout.tsx # root layout (Stack navigator)
index.tsx # → / (home screen)
profile.tsx # → /profile
posts/
_layout.tsx # posts stack layout
index.tsx # → /posts
[id].tsx # → /posts/123 (dynamic)التخطيط الجذري
يغلّف الملف الجذري _layout.tsx جميع الشاشات باستخدام موفّري السياق، ويعرّف أداة التنقل ذات المستوى الأعلى.
// app/_layout.tsx
import { Stack } from 'expo-router';
export default function RootLayout() {
return (
<Stack>
<Stack.Screen name="index" options={{ title: 'Home' }} />
<Stack.Screen name="profile" options={{ title: 'Profile' }} />
</Stack>
);
}التنقل باستخدام Link
استخدم المكوّن Link من expo-router للتنقل التصريحي — وهو مشابه لـ next/link.
import { Link } from 'expo-router';
function HomeScreen() {
return (
<Link href="/profile">Go to Profile</Link>
);
}التنقل باستخدام useRouter
استخدم useRouter() للتنقل الإجرائي، مثل الدفع والاستبدال والعودة برمجيًا.
import { useRouter } from 'expo-router';
function LoginForm() {
const router = useRouter();
async function handleLogin() {
await login();
router.replace('/dashboard');
}
}المسارات الديناميكية
يمكنك الوصول إلى معاملات المسار باستخدام useLocalSearchParams() في ملف مسار ديناميكي.
// app/posts/[id].tsx
import { useLocalSearchParams } from 'expo-router';
export default function PostScreen() {
const { id } = useLocalSearchParams<{ id: string }>();
return <PostDetail postId={id} />;
}التنقل بين علامات التبويب
استخدم Tabs من expo-router داخل تخطيط مجموعة لإنشاء تنقل بعلامات تبويب سفلية.
// app/(tabs)/_layout.tsx
import { Tabs } from 'expo-router';
export default function TabLayout() {
return (
<Tabs>
<Tabs.Screen name="index" options={{ title: 'Home', tabBarIcon: ({ color }) => <HomeIcon color={color} /> }} />
<Tabs.Screen name="explore" options={{ title: 'Explore' }} />
</Tabs>
);
}شاشات النوافذ المنبثقة
اعرض شاشةً كنافذة منبثقة من خلال ضبط presentation: 'modal' في خيارات Stack.Screen.
// app/_layout.tsx
<Stack.Screen name="modal" options={{ presentation: 'modal', title: 'Settings' }} />
// Navigate to modal:
router.push('/modal');الروابط العميقة
يتولى Expo Router معالجة الروابط العميقة تلقائيًا. عرّف مخطط URL في app.json، وستفتح روابط مثل myapp://posts/123 الشاشة الصحيحة.
// app.json
{
"expo": {
"scheme": "myapp"
}
}نمط المصادقة
استخدم تخطيطًا جذريًا يعرض شاشات المصادقة أو علامات تبويب التطبيق بشكل مشروط، استنادًا إلى حالة المصادقة.
// app/_layout.tsx
import { Redirect } from 'expo-router';
function RootLayout() {
const { user } = useAuth();
if (!user) return <Redirect href="/login" />;
return <Stack />;
}تحقق سريع
أيّ hook من Expo Router يقرأ معاملات المسار الديناميكي، مثل id في /posts/[id]؟
مراجعة
يستخدم Expo Router التوجيه القائم على الملفات: app/index.tsx ← الصفحة الرئيسية، وapp/[id].tsx ← مسار ديناميكي. عرّف التخطيطات في _layout.tsx، وتنقّل باستخدام Link أو useRouter()، واقرأ المعاملات باستخدام useLocalSearchParams().
الأسئلة الشائعة
هل درس «التنقل باستخدام Expo Router» مجاني؟
نعم — نص درس «التنقل باستخدام Expo Router» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «التنقل باستخدام Expo Router»؟
أعدّ Expo Router للتنقل المستند إلى الملفات مع مسارات محددة النوع وروابط عميقة. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التنقل باستخدام Expo Router»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مكوّنات React Native الأساسية مقابل DOM للويب
- التنسيق باستخدام StyleSheet API وFlexbox
- التنقل باستخدام Expo Router
- الوصول إلى واجهات الجهاز: الكاميرا والموقع والإشعارات الفورية