0Pricing
React Academy · บทเรียน

การนำทางด้วย Expo Router

ตั้งค่า Expo Router สำหรับการนำทางตามไฟล์ พร้อมเส้นทางที่มีชนิดข้อมูลและการลิงก์โดยตรง

การนำทางด้วย Expo Router เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 จาก 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 />;
}

ตรวจสอบความเข้าใจ

ฮุกใดของ Expo Router ที่อ่านพารามิเตอร์เส้นทางแบบไดนามิก เช่น id ใน /posts/[id]

สรุปทบทวน

Expo Router ใช้การกำหนดเส้นทางตามไฟล์: app/index.tsx → หน้าหลัก, app/[id].tsx → เส้นทางแบบไดนามิก กำหนดเลย์เอาต์ใน _layout.tsx นำทางด้วย Link หรือ useRouter() และอ่านพารามิเตอร์ด้วย useLocalSearchParams()

คำถามที่พบบ่อย

บทเรียน “การนำทางด้วย Expo Router” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การนำทางด้วย Expo Router” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การนำทางด้วย Expo Router”

ตั้งค่า Expo Router สำหรับการนำทางตามไฟล์ พร้อมเส้นทางที่มีชนิดข้อมูลและการลิงก์โดยตรง คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การนำทางด้วย Expo Router” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คอมโพเนนต์หลักของ React Native เทียบกับ DOM บนเว็บ
  2. การตกแต่งด้วย StyleSheet API และ Flexbox
  3. การนำทางด้วย Expo Router
  4. การเข้าถึง API ของอุปกรณ์: กล้อง ตำแหน่ง และการแจ้งเตือนแบบพุช
← กลับไปที่ React Academy