การนำทางด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คอมโพเนนต์หลักของ React Native เทียบกับ DOM บนเว็บ
- การตกแต่งด้วย StyleSheet API และ Flexbox
- การนำทางด้วย Expo Router
- การเข้าถึง API ของอุปกรณ์: กล้อง ตำแหน่ง และการแจ้งเตือนแบบพุช