
ในยุคที่เว็บแอปพลิเคชันมีความซับซ้อนและต้องการการนำทางที่ราบรื่น React Router DOM ได้กลายเป็นเครื่องมือคู่ใจของนักพัฒนา React ไปโดยปริยาย หากคุณกำลังมองหาแนวทางในการจัดการเส้นทาง (routing) ในโปรเจกต์ React ของคุณให้มีประสิทธิภาพสูงสุด คู่มือฉบับสมบูรณ์ปี 2026 นี้คือคำตอบที่คุณต้องการ
เราจะพาคุณเจาะลึกทุกแง่มุมของ React Router DOM ตั้งแต่พื้นฐานการติดตั้ง ไปจนถึงการใช้งานฟีเจอร์ขั้นสูงที่ช่วยให้การพัฒนาเว็บแอปพลิเคชันของคุณเป็นไปอย่างมีระบบ ไม่ว่าคุณจะเป็นนักพัฒนาหน้าใหม่ที่เพิ่งเริ่มต้น หรือนักพัฒนาที่มีประสบการณ์ที่ต้องการอัปเดตความรู้เกี่ยวกับเวอร์ชันล่าสุด React Router DOM 2026 จะมอบเทคนิคและแนวทางปฏิบัติที่ดีที่สุด เพื่อให้คุณสร้างประสบการณ์ผู้ใช้ที่ยอดเยี่ยมได้อย่างแน่นอน
- React Router DOM คืออะไร? ทำไมถึงสำคัญในปี 2026
- การทำงานพื้นฐานของ Routing
- SPA และความสำคัญของ Client-Side Routing
- การติดตั้งและตั้งค่า React Router DOM 2026
- การติดตั้งด้วย npm/yarn
- การตั้งค่า BrowserRouter และ Routes
- การสร้างเส้นทาง (Routes) และการนำทาง (Navigation)
- การใช้ Link และ NavLink
- Nested Routes: การจัดการเส้นทางซ้อนกัน
- การส่งผ่านข้อมูล: URL Parameters, Query Strings, และ State
- การใช้งาน URL Parameters
- การใช้งาน Query Strings
- การส่งผ่าน State ผ่าน Link
- การจัดการ Route ที่ซับซ้อนและ Private Routes
- การสร้าง Private Route
- การจัดการหน้า 404 Not Found
- เทคนิคขั้นสูงและแนวทางปฏิบัติที่ดีที่สุด (Best Practices) 2026
- Code Splitting และ Lazy Loading
- Error Boundaries ในการจัดการ Routing
- การเขียน Unit/Integration Tests สำหรับ Routing
- ตัวอย่างตัวเลขจริง
- สรุปประเด็นสำคัญ
- สรุป
- คำถามที่พบบ่อย (FAQ)
- React Router DOM เหมาะสำหรับโปรเจกต์ React ประเภทไหน?
- HashRouter กับ BrowserRouter ต่างกันอย่างไร?
- จำเป็นต้องใช้ `Link` แทน `<a>` เสมอไปหรือไม่?
- ทำไมต้องใช้ `react-router-dom` แทน `react-router`?
- เวอร์ชันล่าสุดของ React Router DOM คือเวอร์ชันอะไรในปี 2026?
React Router DOM คืออะไร? ทำไมถึงสำคัญในปี 2026
React Router DOM คือ ไลบรารี JavaScript ที่ใช้ในการจัดการการนำทาง (navigation) หรือที่เรียกกันว่า ‘routing’ ในแอปพลิเคชันที่พัฒนาด้วย React มันทำหน้าที่เป็นตัวเชื่อมระหว่าง URL ที่แสดงในเบราว์เซอร์กับคอมโพเนนต์ (components) ที่จะถูกเรนเดอร์ขึ้นมาบนหน้าจอ ทำให้ผู้ใช้สามารถคลิกไปยังหน้าต่างๆ ได้เหมือนกับการเข้าเว็บไซต์ปกติ โดยไม่ต้องโหลดหน้าเว็บใหม่ทั้งหมด ซึ่งนี่คือหัวใจสำคัญของการสร้าง Single Page Application (SPA) ที่มีประสิทธิภาพ
ในปี 2026 ความคาดหวังของผู้ใช้งานเว็บแอปพลิเคชันสูงขึ้นกว่าเดิมมาก พวกเขาต้องการประสบการณ์ที่รวดเร็ว ลื่นไหล และใช้งานง่าย การจัดการ routing ที่ดีด้วย React Router DOM จึงไม่ใช่แค่ทางเลือก แต่เป็นสิ่งจำเป็น การที่แอปพลิเคชันสามารถเปลี่ยนหน้าไปมาระหว่างส่วนต่างๆ ได้อย่างรวดเร็วโดยไม่มีการรีเฟรชหน้าเต็ม ช่วยลดเวลาในการรอคอย เพิ่มการมีส่วนร่วมของผู้ใช้ และทำให้แอปพลิเคชันของคุณดูเป็นมืออาชีพมากขึ้น นอกจากนี้ React Router DOM ยังช่วยให้นักพัฒนาสามารถจัดการกับ state ของ URL ได้อย่างมีประสิทธิภาพ เช่น การส่งพารามิเตอร์ผ่าน URL (URL parameters) หรือการจัดการกับ query strings ซึ่งจำเป็นอย่างยิ่งสำหรับการสร้างแอปพลิเคชันที่ซับซ้อนและมีการโต้ตอบกับผู้ใช้สูง เช่น ระบบจัดการสินค้า, แดชบอร์ดวิเคราะห์ข้อมูล หรือแม้แต่แพลตฟอร์มโซเชียลมีเดีย
การทำงานพื้นฐานของ Routing
หัวใจของการทำงานของ React Router DOM คือการจับคู่ (mapping) เส้นทาง URL กับคอมโพเนนต์ที่เกี่ยวข้อง เมื่อผู้ใช้เข้าถึง URL ใด URL หนึ่ง React Router DOM จะทำการตรวจสอบว่า URL นั้นตรงกับ ‘เส้นทาง’ (route) ใดที่ได้กำหนดไว้ในโค้ด จากนั้นจะเรนเดอร์คอมโพเนนต์ที่เชื่อมโยงกับเส้นทางนั้นๆ ให้ปรากฏบนหน้าจอ ตัวอย่างเช่น ถ้าคุณมีเส้นทาง `/products` ที่เชื่อมโยงกับคอมโพเนนต์ `ProductsPage` เมื่อผู้ใช้พิมพ์ `yourdomain.com/products` ในเบราว์เซอร์ React Router DOM จะแสดงผล `ProductsPage` ขึ้นมาโดยอัตโนมัติ โดยไม่ต้องมีการรีโหลดหน้าเว็บทั้งหน้า
SPA และความสำคัญของ Client-Side Routing
Single Page Application (SPA) คือเว็บแอปพลิเคชันที่โหลดเพียงหน้า HTML เดียว และใช้ JavaScript ในการอัปเดตเนื้อหาแบบไดนามิกเมื่อผู้ใช้โต้ตอบกับแอปพลิเคชัน แทนที่จะโหลดหน้า HTML ใหม่จากเซิร์ฟเวอร์ทุกครั้ง Client-side routing ซึ่ง React Router DOM เป็นตัวอย่างที่ดีที่สุด ทำให้การเปลี่ยนหน้าใน SPA เป็นไปอย่างราบรื่นและรวดเร็ว เพราะการจัดการเส้นทางและการเรนเดอร์คอมโพเนนต์เกิดขึ้นบนเบราว์เซอร์ของผู้ใช้โดยตรง (client-side) ไม่ต้องพึ่งพาการร้องขอข้อมูลจากเซิร์ฟเวอร์ใหม่ทุกครั้ง ช่วยเพิ่มประสิทธิภาพและความเร็วของแอปพลิเคชันได้อย่างมาก
การติดตั้งและตั้งค่า React Router DOM 2026
การเริ่มต้นใช้งาน React Router DOM นั้นง่ายดาย เพียงแค่ติดตั้งแพ็กเกจผ่าน npm หรือ yarn ในโปรเจกต์ React ของคุณ โดยทั่วไปแล้ว จะใช้คำสั่ง `npm install react-router-dom` หรือ `yarn add react-router-dom` หลังจากติดตั้งเสร็จสิ้น ขั้นตอนต่อไปคือการตั้งค่า Router ในแอปพลิเคชันของคุณ ซึ่งมักจะทำที่ไฟล์หลักของแอปพลิเคชัน เช่น `App.js` หรือ `index.js`
ในปี 2026 เวอร์ชันล่าสุดของ React Router DOM (เช่น v6 หรือสูงกว่า) ได้มีการปรับปรุง API ให้ใช้งานง่ายและทรงพลังยิ่งขึ้น การตั้งค่าพื้นฐานจะเกี่ยวข้องกับการใช้ component หลักสองตัวคือ `BrowserRouter` (หรือ `HashRouter` หากต้องการใช้ hash-based routing) และ `Routes` พร้อมกับ `Route`
`BrowserRouter` จะทำหน้าที่เป็นตัวจัดการ routing หลัก โดยจะใช้ HTML5 History API ในการซิงโครไนซ์ UI กับ URL ส่วน `Routes` จะทำหน้าที่เป็น container สำหรับ `Route` ทั้งหมด ในขณะที่ `Route` แต่ละตัวจะจับคู่เส้นทาง URL กับคอมโพเนนต์ที่จะแสดงผล การตั้งค่านี้ช่วยให้แอปพลิเคชันของคุณพร้อมสำหรับการจัดการเส้นทางที่ซับซ้อนยิ่งขึ้น
การติดตั้งด้วย npm/yarn
เปิด Terminal หรือ Command Prompt ในโฟลเดอร์โปรเจกต์ React ของคุณ แล้วรันคำสั่งใดคำสั่งหนึ่งต่อไปนี้:
สำหรับ npm:
“`bash
npm install react-router-dom
“`
สำหรับ yarn:
“`bash
yarn add react-router-dom
“`
คำสั่งนี้จะดาวน์โหลดและติดตั้งไลบรารี React Router DOM รวมถึง dependency ที่จำเป็นลงในโปรเจกต์ของคุณ
การตั้งค่า BrowserRouter และ Routes
ในไฟล์หลักของแอปพลิเคชัน (เช่น `App.js`) คุณจะต้อง import component ที่จำเป็นและทำการตั้งค่า Router ดังนี้:
“`jsx
import React from ‘react’;
import { BrowserRouter, Routes, Route } from ‘react-router-dom’;
import HomePage from ‘./HomePage’; // สมมติว่ามีคอมโพเนนต์ HomePage
import AboutPage from ‘./AboutPage’; // สมมติว่ามีคอมโพเนนต์ AboutPage
function App() {
return (
<BrowserRouter>
<Routes>
<Route path=”/” element={<HomePage />} />
<Route path=”/about” element={<AboutPage />} />
{/ เพิ่ม Route อื่นๆ ที่นี่ /}
</Routes>
</BrowserRouter>
);
}
export default App;
“`
ในตัวอย่างนี้ `BrowserRouter` ห่อหุ้ม `Routes` ทั้งหมด `Routes` จะคอยมองหา `Route` ที่ตรงกับ URL ปัจจุบัน และ `Route` แต่ละตัวจะระบุ `path` (เส้นทาง URL) และ `element` (คอมโพเนนต์ที่จะแสดงเมื่อเส้นทางตรงกัน)
การสร้างเส้นทาง (Routes) และการนำทาง (Navigation)
การสร้างเส้นทางใน React Router DOM ทำได้โดยการใช้ component `Route` ซึ่งคุณสามารถกำหนด `path` ที่เป็น URL และ `element` ที่เป็นคอมโพเนนต์ที่ต้องการแสดงผลเมื่อ URL ตรงกัน นอกจากนี้ ในเวอร์ชันใหม่ๆ ของ React Router DOM (ตั้งแต่ v6) การจัดการกับ nested routes หรือเส้นทางซ้อนกันก็ทำได้ง่ายขึ้น ทำให้โครงสร้างแอปพลิเคชันมีความเป็นระเบียบมากขึ้น
สำหรับการนำทางระหว่างหน้าต่างๆ เราจะใช้ component `Link` (หรือ `NavLink` สำหรับลิงก์ที่ต้องการ active state) แทนแท็ก `<a>` แบบ HTML ปกติ เพื่อให้การเปลี่ยนหน้าเกิดขึ้นโดยไม่ต้อง reload หน้าเว็บใหม่ทั้งหมด การใช้ `Link` จะทำให้ React Router DOM จัดการการเปลี่ยนเส้นทางได้อย่างถูกต้องภายใน SPA ของคุณ
การใช้ Link และ NavLink
Component `Link` ใช้สำหรับการสร้างลิงก์ไปยังเส้นทางอื่นภายในแอปพลิเคชัน:
“`jsx
import { Link } from ‘react-router-dom’;
function Navigation() {
return (
<nav>
<Link to=”/”>หน้าหลัก</Link> |
<Link to=”/about”>เกี่ยวกับเรา</Link>
</nav>
);
}
“`
Component `NavLink` เป็นเหมือน `Link` แต่มีความสามารถเพิ่มเติมในการเพิ่ม class หรือ style เมื่อลิงก์นั้นเป็น active (ตรงกับ URL ปัจจุบัน) ซึ่งมีประโยชน์มากสำหรับการสร้างเมนูนำทางที่ต้องการแสดงสถานะปัจจุบัน:
“`jsx
import { NavLink } from ‘react-router-dom’;
function Navigation() {
return (
<nav>
<NavLink to=”/” className={({ isActive }) => isActive ? ‘active-link’ : ”}>หน้าหลัก</NavLink> |
<NavLink to=”/about” className={({ isActive }) => isActive ? ‘active-link’ : ”}>เกี่ยวกับเรา</NavLink>
</nav>
);
}
“`
Nested Routes: การจัดการเส้นทางซ้อนกัน
Nested Routes ช่วยให้คุณสามารถจัดโครงสร้างของเส้นทางที่ซ้อนกันภายในคอมโพเนนต์ได้ เช่น การมีหน้าโปรไฟล์ผู้ใช้ที่ประกอบด้วยส่วนย่อยๆ เช่น ข้อมูลส่วนตัว, โพสต์, และการตั้งค่า
“`jsx
import { Routes, Route } from ‘react-router-dom’;
import UserProfile from ‘./UserProfile’;
import UserPosts from ‘./UserPosts’;
import UserSettings from ‘./UserSettings’;
function UserRoutes() {
return (
<Routes>
<Route path=”/” element={<UserProfile />} />
<Route path=”posts” element={<UserPosts />} />
<Route path=”settings” element={<UserSettings />} />
</Routes>
);
}
// ใน App.js
// <Route path=”/user/:userId/*” element={<UserRoutes />} />
การส่งผ่านข้อมูล: URL Parameters, Query Strings, และ State
React Router DOM มีกลไกที่ยืดหยุ่นในการส่งผ่านข้อมูลระหว่างหน้าต่างๆ ซึ่งเป็นสิ่งจำเป็นสำหรับการสร้างแอปพลิเคชันที่ตอบสนองและมีข้อมูลเฉพาะเจาะจง เช่น การแสดงข้อมูลสินค้าตาม ID หรือการกรองผลการค้นหา
1. URL Parameters: ใช้สำหรับระบุข้อมูลที่เฉพาะเจาะจงใน URL เช่น `/users/123` โดย `123` คือ ID ของผู้ใช้ สามารถเข้าถึงได้ผ่าน hook `useParams()`
2. Query Strings: ใช้สำหรับการส่งพารามิเตอร์เพิ่มเติมที่ไม่ใช่ส่วนหลักของ URL เช่น `/search?q=react&page=2` สามารถเข้าถึงได้ผ่าน hook `useSearchParams()`
3. State: การส่งข้อมูลผ่าน state ของ Link (ไม่ปรากฏใน URL) เหมาะสำหรับข้อมูลที่ไม่ควรเปิดเผยใน URL หรือข้อมูลชั่วคราว สามารถส่งผ่าน prop `state` ของ `Link` และเข้าถึงได้ผ่าน hook `useLocation()`
การใช้งาน URL Parameters
สมมติว่าคุณต้องการแสดงข้อมูลของผู้ใช้ตาม ID:
ใน `App.js`:
“`jsx
<Route path=”/user/:userId” element={<UserProfile />} />
“`
ใน `UserProfile.js`:
“`jsx
import { useParams } from ‘react-router-dom’;
function UserProfile() {
const { userId } = useParams();
// ใช้ userId ในการดึงข้อมูลผู้ใช้จาก API
return <h2>ข้อมูลผู้ใช้ ID: {userId}</h2>;
}
“`
การใช้งาน Query Strings
สมมติว่าคุณต้องการทำฟังก์ชันค้นหา:
ใน `SearchPage.js`:
“`jsx
import { useSearchParams } from ‘react-router-dom’;
function SearchPage() {
const [searchParams] = useSearchParams();
const query = searchParams.get(‘q’);
const page = searchParams.get(‘page’);
return (
<div>
<h2>ผลการค้นหาสำหรับ: {query}</h2>
<p>หน้า: {page}</p>
{/ แสดงผลการค้นหา /}
</div>
);
}
// การสร้างลิงก์ไปยังหน้าค้นหา
<Link to={`/search?q=react&page=1`}>ค้นหา React หน้า 1</Link>
“`
การส่งผ่าน State ผ่าน Link
บางครั้งคุณต้องการส่งข้อมูลที่ไม่ควรปรากฏใน URL เช่น ข้อมูล session หรือข้อมูลชั่วคราว:
“`jsx
import { Link, useLocation } from ‘react-router-dom’;
function SomeComponent() {
const dataToSend = { message: ‘ข้อมูลจากหน้าก่อนหน้า’ };
return (
<Link to=”/destination” state={dataToSend}>
ไปหน้าปลายทางพร้อมข้อมูล
</Link>
);
}
function DestinationComponent() {
const location = useLocation();
const receivedData = location.state;
return (
<div>
{receivedData ? <p>{receivedData.message}</p> : <p>ไม่ได้รับข้อมูล</p>}
</div>
);
}
“`
การจัดการ Route ที่ซับซ้อนและ Private Routes
แอปพลิเคชันในโลกแห่งความเป็นจริงมักต้องการการจัดการเส้นทางที่ซับซ้อนกว่าเดิม เช่น การป้องกันไม่ให้ผู้ใช้ที่ไม่ได้รับอนุญาตเข้าถึงหน้าบางหน้า (Private Routes) หรือการแสดงผลหน้า 404 Not Found เมื่อ URL ไม่ตรงกับเส้นทางใดๆ เลย React Router DOM มีเครื่องมือที่ช่วยจัดการสถานการณ์เหล่านี้ได้อย่างมีประสิทธิภาพ
สำหรับ Private Routes เราสามารถสร้างคอมโพเนนต์ Wrapper ขึ้นมาเพื่อตรวจสอบสถานะการล็อกอินของผู้ใช้ก่อนที่จะอนุญาตให้เข้าถึงคอมโพเนนต์หลัก หากผู้ใช้ยังไม่ได้ล็อกอิน ก็จะถูก redirect ไปยังหน้าล็อกอินแทน ส่วนการจัดการหน้า 404 สามารถทำได้โดยการกำหนด `Route` ที่มี `path=’*’` ซึ่งจะตรงกับ URL ใดๆ ที่ไม่ตรงกับ `Route` ก่อนหน้า
การสร้าง Private Route
เราสามารถสร้างคอมโพเนนต์ `PrivateRoute` เพื่อควบคุมการเข้าถึง:
“`jsx
import React from ‘react’;
import { Navigate, Outlet, useLocation } from ‘react-router-dom’;
function PrivateRoute({ isAuthenticated, children }) {
const location = useLocation();
if (!isAuthenticated) {
// Redirect them to the /login page, but save the current location they were
// trying to go to when they were redirected. This allows us to send them
// along to that page after they login, which is a nicer user experience
// for the user than dropping them off on the home page.
return <Navigate to=”/login” state={{ from: location }} replace />;
}
return children ? children : <Outlet />;
}
// การใช้งานใน App.js
// const userIsAuthenticated = true; // ดึงค่าจาก state การล็อกอิน
// <Route path=”/dashboard” element={<PrivateRoute isAuthenticated={userIsAuthenticated}><DashboardPage /></PrivateRoute>} />
“`
การจัดการหน้า 404 Not Found
การกำหนด Route สำหรับหน้า 404 สามารถทำได้ง่ายๆ โดยใช้ wildcard `*`:
“`jsx
import { Routes, Route } from ‘react-router-dom’;
import HomePage from ‘./HomePage’;
import AboutPage from ‘./AboutPage’;
import NotFoundPage from ‘./NotFoundPage’; // คอมโพเนนต์สำหรับหน้า 404
function AppRoutes() {
return (
<Routes>
<Route path=”/” element={<HomePage />} />
<Route path=”/about” element={<AboutPage />} />
{/ Route ที่จะตรงกับ URL ที่ไม่รู้จัก /}
<Route path=”*” element={<NotFoundPage />} />
</Routes>
);
}
“`
เมื่อผู้ใช้เข้า URL ที่ไม่มีการกำหนดไว้ใน `Route` ก่อนหน้า React Router DOM จะแสดงผล `NotFoundPage` ขึ้นมา
เทคนิคขั้นสูงและแนวทางปฏิบัติที่ดีที่สุด (Best Practices) 2026
เพื่อให้การใช้ React Router DOM ในโปรเจกต์ปี 2026 มีประสิทธิภาพสูงสุด การทำความเข้าใจเทคนิคขั้นสูงและยึดถือแนวทางปฏิบัติที่ดีที่สุดเป็นสิ่งสำคัญ ซึ่งรวมถึงการจัดการ code splitting เพื่อลดขนาด bundle เริ่มต้น, การใช้ lazy loading เพื่อโหลดคอมโพเนนต์เฉพาะเมื่อจำเป็น, การจัดการ error boundaries เพื่อป้องกันแอปพลิเคชันล่มเมื่อเกิดข้อผิดพลาดในคอมโพเนนต์, และการเขียน test สำหรับ routing ของคุณ
การจัดโครงสร้างโปรเจกต์ให้ดี เช่น การแยกไฟล์ routing ออกมาต่างหาก หรือการใช้ nested routes อย่างเหมาะสม จะช่วยให้โค้ดอ่านง่ายและง่ายต่อการบำรุงรักษาในระยะยาว การเลือกใช้ `BrowserRouter` หรือ `HashRouter` ให้เหมาะสมกับข้อกำหนดของโปรเจกต์ก็เป็นอีกปัจจัยหนึ่งที่ควรพิจารณา
Code Splitting และ Lazy Loading
เพื่อเพิ่มประสิทธิภาพการโหลดหน้าเว็บ ควรใช้ React.lazy และ Suspense เพื่อทำการ split code และ lazy load คอมโพเนนต์เฉพาะเมื่อมีการเข้าถึงเส้นทางนั้นๆ:
“`jsx
import React, { lazy, Suspense } from ‘react’;
import { Routes, Route } from ‘react-router-dom’;
const HomePage = lazy(() => import(‘./HomePage’));
const AboutPage = lazy(() => import(‘./AboutPage’));
function AppRoutes() {
return (
<Suspense fallback={<div>กำลังโหลด…</div>}>
<Routes>
<Route path=”/” element={<HomePage />} />
<Route path=”/about” element={<AboutPage />} />
</Routes>
</Suspense>
);
}
“`
`Suspense` จะแสดง fallback UI ในขณะที่คอมโพเนนต์กำลังถูกโหลด
Error Boundaries ในการจัดการ Routing
Error Boundaries เป็นคอมโพเนนต์ React ที่ช่วยดักจับ JavaScript errors ที่เกิดขึ้นในส่วนต่างๆ ของ UI tree ทำให้ส่วนอื่นๆ ของแอปพลิเคชันยังคงทำงานต่อไปได้:
“`jsx
// สมมติว่ามี ErrorBoundary component แล้ว
function AppRoutes() {
return (
<Routes>
<Route path=”/” element={<HomePage />} />
<Route path=”/error-prone” element={<ErrorBoundary><ErrorProneComponent /></ErrorBoundary>} />
</Routes>
);
}
“`
เมื่อ `ErrorProneComponent` เกิดข้อผิดพลาด `ErrorBoundary` จะสามารถแสดง UI ที่เตรียมไว้แทนการทำให้ทั้งหน้าเว็บพัง
การเขียน Unit/Integration Tests สำหรับ Routing
การทดสอบ routing เป็นสิ่งสำคัญเพื่อให้แน่ใจว่าการนำทางทำงานได้อย่างถูกต้อง:
“`javascript
// ตัวอย่างการทดสอบด้วย React Testing Library
import { render, screen } from ‘@testing-library/react’;
import { MemoryRouter, Routes, Route } from ‘react-router-dom’;
import HomePage from ‘./HomePage’;
test(‘renders homepage at root path’, () => {
render(
<MemoryRouter initialEntries={[‘/’]}>
<Routes>
<Route path=”/” element={<HomePage />} />
</Routes>
</MemoryRouter>
);
expect(screen.getByText(/ยินดีต้อนรับ/i)).toBeInTheDocument(); // สมมติว่า HomePage มีข้อความนี้
});
“`
`MemoryRouter` เหมาะสำหรับการทดสอบเพราะไม่ต้องยุ่งเกี่ยวกับ URL จริงในเบราว์เซอร์
| คุณสมบัติ | BrowserRouter | HashRouter |
|---|---|---|
| การใช้งาน URL | ใช้ HTML5 History API (เช่น /users/123) | ใช้ URL Hash (#) (เช่น /#/users/123) |
| ความเข้ากันได้กับเบราว์เซอร์ | เบราว์เซอร์รุ่นใหม่ๆ ที่รองรับ History API | รองรับเบราว์เซอร์รุ่นเก่าได้ดีกว่า |
| การตั้งค่า Server | ต้องมีการตั้งค่า Server Side Routing เพื่อจัดการ URL ที่ไม่ตรงกับไฟล์ Static | ไม่ต้องตั้งค่า Server Side Routing เพิ่มเติม (ทำงานบน Client-side ทั้งหมด) |
| URL ที่ดูสะอาดตา | สะอาดกว่า | มีเครื่องหมาย # ปรากฏ |
| เหมาะสำหรับ | เว็บแอปพลิเคชันส่วนใหญ่, SPA สมัยใหม่ | โปรเจกต์ที่ต้องการความเข้ากันได้สูงสุดกับเบราว์เซอร์เก่า หรือไม่สามารถควบคุมการตั้งค่า Server ได้ |
ตัวอย่างตัวเลขจริง
- ตัวอย่างที่ 1: การส่งพารามิเตอร์ ID ผู้ใช้ (URL Parameter) – สมมติว่า URL คือ `/users/101` คอมโพเนนต์ที่ใช้ `useParams()` จะได้รับค่า `{ userId: '101' }`
- ตัวอย่างที่ 2: การใช้งาน Query String สำหรับการกรอง – หาก URL คือ `/products?category=electronics&sort=price_asc` การใช้ `useSearchParams()` จะทำให้เข้าถึงค่า `category='electronics'` และ `sort='price_asc'` ได้
- ตัวอย่างที่ 3: การตั้งค่า Routes พื้นฐาน – ใน `App.js` มีการกำหนด `Route` 3 เส้นทาง: `/` (แสดง `HomePage`), `/about` (แสดง `AboutPage`), และ `*` (แสดง `NotFoundPage`) ซึ่งครอบคลุมการนำทางทั้งหมด
สรุปประเด็นสำคัญ
- React Router DOM คือไลบรารีหลักสำหรับการจัดการ Client-Side Routing ใน React SPA
- การติดตั้งทำได้ง่ายด้วย npm/yarn และตั้งค่าด้วย BrowserRouter/Routes/Route
- ใช้ Link/NavLink แทนแท็ก <a> เพื่อการนำทางที่ราบรื่นภายใน SPA
- URL Parameters, Query Strings, และ State เป็นวิธีส่งข้อมูลระหว่างหน้าที่มีประสิทธิภาพ
- Private Routes และหน้า 404 ช่วยเพิ่มความปลอดภัยและความสมบูรณ์ของแอปพลิเคชัน
- Code Splitting/Lazy Loading และ Error Boundaries คือเทคนิคสำคัญเพื่อประสิทธิภาพและเสถียรภาพในปี 2026
- การทดสอบ Routing อย่างสม่ำเสมอช่วยให้มั่นใจว่าการนำทางทำงานถูกต้องตามที่คาดหวัง
สรุป
React Router DOM ยังคงเป็นเครื่องมือที่ขาดไม่ได้สำหรับนักพัฒนา React ในปี 2026 การทำความเข้าใจหลักการทำงาน การติดตั้ง การสร้างเส้นทาง การส่งผ่านข้อมูล และเทคนิคขั้นสูง จะช่วยให้คุณสามารถสร้างเว็บแอปพลิเคชันที่มีการนำทางที่ยอดเยี่ยม มีประสิทธิภาพ และตอบสนองต่อความต้องการของผู้ใช้ได้อย่างดีเยี่ยม
อย่าลืมนำเทคนิคต่างๆ ที่ได้เรียนรู้ไปปรับใช้กับโปรเจกต์ของคุณ ไม่ว่าจะเป็นการจัดการ Private Routes, การทำ Lazy Loading เพื่อเพิ่มความเร็วในการโหลดหน้าเว็บ หรือการเขียนเทสเพื่อความมั่นใจในคุณภาพ การลงทุนเวลาในการเรียนรู้ React Router DOM อย่างลึกซึ้ง จะเป็นการลงทุนที่คุ้มค่าอย่างแน่นอนสำหรับเส้นทางการพัฒนาเว็บแอปพลิเคชันของคุณ
คำถามที่พบบ่อย (FAQ)
React Router DOM เหมาะสำหรับโปรเจกต์ React ประเภทไหน?
React Router DOM เหมาะอย่างยิ่งสำหรับ Single Page Applications (SPA) ที่ต้องการการนำทางระหว่างหน้าต่างๆ โดยไม่ต้องโหลดหน้าเว็บใหม่ทั้งหมด ซึ่งรวมถึงเว็บแอปพลิเคชันส่วนใหญ่ที่พัฒนาด้วย React ในปัจจุบัน
HashRouter กับ BrowserRouter ต่างกันอย่างไร?
BrowserRouter ใช้ HTML5 History API ทำให้ URL ดูสะอาดตา (เช่น /about) แต่ต้องมีการตั้งค่าฝั่ง Server ด้วย ส่วน HashRouter ใช้เครื่องหมาย # (เช่น /#/about) ซึ่งทำงานบน Client-side ทั้งหมดและเข้ากันได้กับ Server ทุกประเภท
จำเป็นต้องใช้ `Link` แทน `<a>` เสมอไปหรือไม่?
สำหรับการนำทางภายในแอปพลิเคชันที่ใช้ React Router DOM แนะนำให้ใช้ `Link` หรือ `NavLink` เพื่อให้ Router จัดการการเปลี่ยนเส้นทางได้อย่างถูกต้องและรักษา SPA ของคุณไว้ หากใช้ `<a>` ทั่วไป เบราว์เซอร์จะทำการโหลดหน้าใหม่ซึ่งขัดกับหลักการของ SPA
ทำไมต้องใช้ `react-router-dom` แทน `react-router`?
`react-router` เป็น core package ที่มี logic สำหรับ routing ส่วน `react-router-dom` เป็น package ที่ออกแบบมาสำหรับเว็บเบราว์เซอร์โดยเฉพาะ ซึ่งรวมถึง components ที่จำเป็นสำหรับการทำงานบน DOM เช่น `BrowserRouter`, `Link` เป็นต้น
เวอร์ชันล่าสุดของ React Router DOM คือเวอร์ชันอะไรในปี 2026?
ณ ปี 2026 เวอร์ชันหลักที่ใช้งานกันอย่างแพร่หลายคือ v6 ซึ่งมีการเปลี่ยนแปลง API หลายอย่างให้ใช้ง่ายขึ้นและมีประสิทธิภาพมากขึ้น เช่น การใช้ `element` prop แทน `component` หรือ `render` prop และการปรับปรุงเรื่อง Nested Routes
พร้อมสร้างเว็บแอปที่เหนือกว่าด้วย React Router DOM แล้วหรือยัง? เริ่มต้นโปรเจกต์ใหม่หรือปรับปรุงโปรเจกต์เดิมของคุณวันนี้! หากคุณต้องการพัฒนาแอปพลิเคชันที่ซับซ้อนและมีประสิทธิภาพสูง อย่าพลาดโอกาสในการเรียนรู้และประยุกต์ใช้เครื่องมือทางการเงินที่หลากหลาย สมัครสมาชิก XM เพื่อเข้าถึงเครื่องมือและข้อมูลเชิงลึกที่จะช่วยให้การลงทุนของคุณมีทิศทางที่ดีขึ้น! เปิดบัญชี XM ฟรี ผ่าน
การลงทุนมีความเสี่ยง โปรดศึกษาข้อมูลก่อนตัดสินใจลงทุน ผลการดำเนินงานในอดีตไม่ได้เป็นสิ่งยืนยันถึงผลการดำเนินงานในอนาคต
แนะนำเว็บในเครือ: xmsignal.com | siamlancard.com | siam2r.com | siamcafe.net | siamcafebook.com | icafecloud.net