Contents

วิธีใช้ React Router V6: คู่มือสำหรับผู้เริ่มต้น

React Router เป็นไลบรารียอดนิยมที่คุณสามารถใช้เพื่อกำหนดเส้นทางในแอปพลิเคชัน React โดยให้แนวทางตามส่วนประกอบในการจัดการงานการกำหนดเส้นทางที่หลากหลาย รวมถึงการนำทางเพจ พารามิเตอร์การสืบค้น และอื่นๆ อีกมากมาย

React Router เวอร์ชัน 6 ใช้การปรับเปลี่ยนที่สำคัญในอัลกอริธึมการกำหนดเส้นทางเพื่อแก้ไขข้อบกพร่องที่มีอยู่ในซอฟต์แวร์ซ้ำครั้งก่อน และส่งมอบระบบการจัดการเส้นทางขั้นสูงและมีประสิทธิภาพมากขึ้น

เริ่มต้นใช้งานการกำหนดเส้นทางโดยใช้ React Router V6

ในการเริ่มต้นกระบวนการ คุณสามารถสร้างแอปพลิเคชัน React หรือกำหนดค่าโปรเจ็กต์ React โดยใช้ Vite เป็นเซิร์ฟเวอร์การพัฒนาของคุณได้ เมื่อสร้างโปรเจ็กต์แล้ว ให้ดำเนินการแนะนำไลบรารี react-router-dom ภายในการขึ้นต่อกันของโปรเจ็กต์

 npm install react-router-dom 

การสร้างเส้นทางโดยใช้ React Router

การห่อหุ้มแอปพลิเคชันทั้งหมดภายในส่วนประกอบ BrowserRouter เป็นวิธีที่มีประสิทธิภาพในการสร้างเส้นทาง เพื่อให้บรรลุเป้าหมายนี้ โปรดอัปเดตไฟล์ JavaScript ที่เกี่ยวข้อง เช่น index.jsx หรือ main.jsx ด้วยการรวมการแก้ไขที่แนะนำ คุณจะได้สร้างรากฐานสำหรับการกำหนดเส้นทางภายในแอปพลิเคชันของคุณได้สำเร็จ

 import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.jsx'
import { BrowserRouter as Router } from 'react-router-dom';

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <Router>
      <App/>
    </Router>
  </React.StrictMode>,
)

การใช้ BrowserRouter wrapper รอบๆ ส่วนประกอบของแอปพลิเคชันทำให้สามารถเข้าถึงฟังก์ชันการกำหนดเส้นทางและความสามารถที่ได้รับจากไลบรารี React Router ได้อย่างสมบูรณ์ ครอบคลุมแอปพลิเคชันทั้งหมด

การใช้ส่วนประกอบเส้นทาง

เมื่อแอปพลิเคชันของคุณถูกรวมเข้ากับส่วนประกอบ BrowserRouter แล้ว คุณสามารถวิเคราะห์การกำหนดค่าการกำหนดเส้นทางได้

ส่วนประกอบ Routes แสดงถึงความก้าวหน้าที่สำคัญเหนือส่วนประกอบ Switch รุ่นก่อน ในแง่ของฟังก์ชันการทำงานภายใน React Router ส่วนประกอบนี้ให้การสนับสนุนการกำหนดเส้นทางแบบสัมพันธ์ ช่วยให้สามารถเปลี่ยนระหว่างส่วนต่างๆ ของแอปพลิเคชันได้อย่างราบรื่น นอกจากนี้ยังมีฟีเจอร์การจัดอันดับเส้นทางอัตโนมัติ เพื่อให้มั่นใจว่าผู้ใช้จะถูกนำทางไปยังเนื้อหาที่เกี่ยวข้องมากที่สุดตามประวัติการนำทางของพวกเขา นอกจากนี้ยังสามารถจัดการเส้นทางที่ซ้อนกันได้ ช่วยให้นักพัฒนาสามารถสร้างลำดับชั้นที่ซับซ้อนของเพจได้อย่างง่ายดาย

โดยทั่วไปแล้ว เส้นทางมักจะถูกกำหนดไว้ในส่วนประกอบระดับบนสุดของแอปพลิเคชัน เช่น ส่วนประกอบของแอป อย่างไรก็ตาม ตำแหน่งอาจแตกต่างกันไปขึ้นอยู่กับโครงสร้างองค์กรเฉพาะของโครงการ

โปรดเปิดไฟล์ “App.jsx” ที่อยู่ในไดเร็กทอรีโปรเจ็กต์ของคุณ และแทนที่โค้ด React เริ่มต้นที่พบในนั้นด้วยเทมเพลตที่ให้ไว้ด้านล่าง:

 import './App.css'
import { Routes, Route } from 'react-router-dom';
import Dashboard from './pages/Dashboard';
import About from './pages/About';

function App() {
  return (
    <>
      <Routes>
        <Route path="/" element={<Dashboard/>}/>
        <Route path="/about" element={<About/>}/>
      </Routes>
    </>
  )
}

export default App 

การตั้งค่าการกำหนดเส้นทางดังกล่าวข้างต้นกำหนดเส้นทาง URL ที่กำหนดไปยังองค์ประกอบของหน้าที่เกี่ยวข้อง ได้แก่ แดชบอร์ดและเกี่ยวกับ จึงรับประกันได้ว่าแอปพลิเคชันจะแสดงองค์ประกอบที่ถูกต้องเมื่อเข้าถึงผ่านที่อยู่ URL ที่ระบุ

พิจารณาฟังก์ชันการทำงานของคุณสมบัติ’องค์ประกอบ’ที่พบในส่วนประกอบเส้นทาง ซึ่งช่วยให้สามารถถ่ายทอดส่วนประกอบที่ใช้งานได้แทนที่จะระบุเพียงการกำหนดเท่านั้น การจัดเตรียมดังกล่าวช่วยให้สามารถถ่ายโอนคุณสมบัติผ่านเส้นทางที่กำหนดเส้นทางและองค์ประกอบที่เกี่ยวข้องได้

ในโฟลเดอร์ซอร์ส ให้สร้างส่วนไดเร็กทอรีใหม่ชื่อ"เพจ"จากนั้นรวมไฟล์ใหม่สองไฟล์ชื่อ"Dashboard.jsx"และ"About.jsx"ใช้ไฟล์เหล่านี้เพื่อทดลองกับเส้นทางต่างๆ

ใช้ createBrowserRouter เพื่อกำหนดเส้นทาง

เอกสารประกอบของ React Router แนะนำให้ใช้ส่วนประกอบ createBrowserRouter เพื่อกำหนดการกำหนดค่าเส้นทางสำหรับเว็บแอปพลิเคชัน React ส่วนประกอบนี้เป็นทางเลือกที่ไม่ซับซ้อนสำหรับ BrowserRouter ซึ่งใช้อาร์เรย์ของเส้นทางเป็นอาร์กิวเมนต์

การรวมองค์ประกอบนี้ช่วยลดข้อกำหนดสำหรับการกำหนดเส้นทางภายในส่วนประกอบแอป เป็นไปได้ที่จะสร้างการกำหนดค่าเส้นทางทั้งหมดในไฟล์ index.jsx หรือ main.jsx แทน

แน่นอนว่า นี่คือการตีความคำสั่งดังกล่าวอย่างละเอียด:scssตัวอย่างเช่น ให้เราพิจารณาสถานการณ์ที่มีการใช้องค์ประกอบนี้:

 import React from 'react'
import ReactDOM from 'react-dom/client'
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import App from './App.jsx'
import Dashboard from './pages/Dashboard';
import About from './pages/About';


const router = createBrowserRouter([
  {
    path: "/",
    element: <App/>,
  },
  {
    path: "/dashboard",
    element: <Dashboard/>,
  },
  {
    path: "/about",
    element: <About/>,
  },
]);

ReactDOM.createRoot(document.getElementById("root")).render(
  <React.StrictMode>
    <RouterProvider router={router}/>
  </React.StrictMode>
); 

การใช้ส่วนประกอบ createBrowserRouter และ RouterProvider ช่วยอำนวยความสะดวกในการสร้างโครงสร้างพื้นฐานการกำหนดเส้นทางภายในแอปพลิเคชันที่ใช้ React โดยใช้ประโยชน์จากความสามารถในการนำทางผู้ใช้อย่างมีประสิทธิภาพตลอดทั้งหน้าหรือฟังก์ชันการทำงานต่างๆ ที่เชื่อมต่อถึงกันของโปรแกรม

ในการนำไปใช้โดยเฉพาะนี้ มีความแตกต่างจากวิธีการทั่วไปโดยที่ส่วนประกอบ BrowserRouter จะห่อหุ้มแอปพลิเคชันทั้งหมด แต่ส่วนประกอบ RouterProvider จะถูกนำมาใช้เพื่อถ่ายทอดบริบทของเราเตอร์ไปยังทุกส่วนประกอบภายในซอฟต์แวร์โดยอาศัยความรอบคอบ

การใช้เส้นทางที่ไม่พบหน้า

การทำงานของ prop path ภายในบริบทของส่วนประกอบ Route ของ React Router นั้นอยู่ที่ความสามารถในการทำการเปรียบเทียบระหว่างพาธที่ระบุกับ URL ปัจจุบัน โดยมีเป้าหมายสูงสุดในการพิจารณาว่าพวกมันสอดคล้องกันเพื่อการนำทางที่ประสบความสำเร็จหรือไม่ ที่จะเกิดขึ้น

เพื่อจัดการกับอินสแตนซ์เมื่อไม่มีเส้นทางที่ตรงกัน คุณสามารถสร้างเส้นทางที่กำหนดซึ่งจัดการข้อผิดพลาด “404 Page Not Found” โดยเฉพาะ การรวมเส้นทางดังกล่าวจะเป็นไปได้สำหรับผู้ใช้ปลายทางที่จะได้รับคำตอบที่เข้าใจได้ในสถานการณ์ที่พวกเขาพยายามเข้าถึง URL ที่ไม่ถูกต้อง

หากต้องการรวมเส้นทาง 404 ไว้ในแอปพลิเคชัน คุณต้องรวมไว้ใน RouteComponent ดังนี้:

 // using the Route component
<Route path="*" element={<NotFound />} />

 // using createBrowserRouter
{ path: "*", element: <NotFound />, }, 

เราจะสร้างส่วนประกอบ NotFound แบบกำหนดเองที่ขยาย NotFoundRouteComponent ในตัวของ React จากนั้นเราจะใช้ส่วนประกอบนี้เพื่อแสดงผลเมื่อไม่พบหน้าที่ร้องขอบนเซิร์ฟเวอร์ เพื่อให้บรรลุเป้าหมายนี้ ก่อนอื่นเราต้องติดตั้ง Axios เพื่อสร้างคำขอ API และจัดรูปแบบส่วนประกอบของเราด้วยโมดูล CSS สุดท้ายนี้ เราจะนำเข้าและใช้แพ็คเกจเหล่านี้ในโค้ดของเรา

เครื่องหมายดอกจัน (*) ทำหน้าที่เป็นตัวยึดตำแหน่งสำหรับอักขระใดๆ ในนิพจน์ทั่วไป ช่วยให้สามารถรองรับอินสแตนซ์เมื่อไม่มีเส้นทางใดที่ตรงกับ URL ที่กำหนด

การนำทางแบบเป็นโปรแกรมโดยใช้ useNavigate Hook

การใช้ฮุก useNavigate นำเสนอแนวทางเครื่องมือสำหรับการจัดการการนำทางภายในแอปพลิเคชันซอฟต์แวร์ โดยเฉพาะอย่างยิ่ง hook นี้พิสูจน์ให้เห็นว่ามีข้อได้เปรียบเมื่อนำทางร่วมกับการกระทำหรือเหตุการณ์ที่ผู้ใช้ริเริ่ม รวมถึงการกดปุ่มและการส่งแบบฟอร์ม

อันที่จริงเราต้องจัดหาตะขอ useNavigate จากแพ็คเกจ React Router ที่ได้รับความนิยมเพื่ออำนวยความสะดวกในการดำเนินการนำทางผ่านการใช้งานส่วนประกอบฟังก์ชัน About.jsx

 import { useNavigate } from 'react-router-dom'; 

รวมองค์ประกอบอินเทอร์เฟซผู้ใช้ไว้ในโครงร่างแอปพลิเคชัน ซึ่งเมื่อเปิดใช้งานแล้ว จะเปลี่ยนเส้นทางผู้ใช้ไปยังเส้นทางที่กำหนด

 function About() {
  const navigate = useNavigate();

  const handleButtonClick = () => {
    navigate("/");
  };

  return (
    <>//Rest of the code ...
      <button onClick={handleButtonClick}>
    </>
  );
}

export default About; 

สิ่งสำคัญที่ควรทราบก็คือ แม้ว่า hook useNavigate และ hook useNavigation ซึ่งทั้งสองอย่างนี้ถูกนำมาใช้ใน React Router เวอร์ชัน 6 ก็มีหลักการตั้งชื่อที่คล้ายกัน แต่ก็มีฟังก์ชันและวัตถุประสงค์ที่แตกต่างกัน

การใช้ฮุก useNavigation ช่วยให้สามารถเข้าถึงข้อมูลที่เกี่ยวข้องกับการนำทาง รวมถึงสถานะการนำทางในปัจจุบันและรายละเอียดเพิ่มเติมต่างๆ ฟังก์ชันดังกล่าวจะเป็นประโยชน์ในการเรนเดอร์ส่วนประกอบอินเทอร์เฟซผู้ใช้ เช่น ตัวบ่งชี้การโหลด ซึ่งนำเสนอการแสดงภาพการดำเนินงานที่กำลังดำเนินอยู่

แน่นอนว่า นี่คือการตีความตัวอย่างที่ให้มาอย่างละเอียดซึ่งสาธิตการใช้งานตะขอ useNavigation:

 import { useNavigation } from "react-router-dom";

function SubmitButton() {
  const navigation = useNavigation();

  const buttonText =
    navigation.state === "submitting"
      ? "Saving..."
      : navigation.state === "loading"
        ? "Saved!"
        : "Go";

  return <button type="submit">{buttonText}</button>;
} 

ข้อมูลโค้ดที่ให้มาสาธิตองค์ประกอบการทำงานของ React ที่เรียกว่า"SubmitButton"ซึ่งใช้ Hook แบบกำหนดเอง"useNavigation"เพื่อรับสถานะการนำทางปัจจุบัน ซึ่งช่วยให้สามารถอัปเดตป้ายกำกับของปุ่มแบบไดนามิกเพื่อตอบสนองต่อการเปลี่ยนแปลงในการโต้ตอบของผู้ใช้กับแอปพลิเคชัน

แม้จะมีฟังก์ชันที่แตกต่างกัน แต่ก็เป็นไปได้ที่จะใช้ทั้งตะขอ"useNavigate"และ"useNavigation"ควบคู่กัน แบบแรกทำหน้าที่เป็นกลไกการเริ่มต้นสำหรับกระบวนการนำทาง ในขณะที่แบบหลังให้การเข้าถึงข้อมูลการนำทางแบบสดซึ่งกำหนดประเภทของคำติชมอินเทอร์เฟซผู้ใช้ที่จะแสดงภายในสภาพแวดล้อมของเบราว์เซอร์

การใช้ useRoutes Hook

ตะขอปัจจุบันช่วยให้สามารถกำหนดเส้นทางเส้นทางพร้อมกับส่วนประกอบที่สัมพันธ์กันในลักษณะที่ครอบคลุม ซึ่งจะช่วยอำนวยความสะดวกในกระบวนการจับคู่เส้นทางและแสดงส่วนประกอบที่เกี่ยวข้องตามลำดับ

แน่นอนว่านี่เป็นภาพประกอบที่สวยงามซึ่งแสดงให้เห็นถึงการใช้ยูทิลิตี้นี้:

 import { useRoutes } from 'react-router-dom';
import Dashboard from './Dashboard';
import About from './About';

const routes = [
  {
    path: '/',
    element: <Dashboard/>,
  },
  {
    path: '/about',
    element: <About />,
  },
];

function App() {
  const routeResult = useRoutes(routes);
  return routeResult;
}

export default App; 

วัตถุเส้นทางทำหน้าที่เป็นสื่อกลางระหว่าง URL และส่วนประกอบที่เกี่ยวข้องในแอปพลิเคชัน ด้วยการใช้ออบเจ็กต์นี้ องค์ประกอบของแอปสามารถแมป URL ปัจจุบันกับส่วนประกอบที่เกี่ยวข้องได้สำเร็จ โดยใช้ประโยชน์จากกระบวนการจับคู่ที่สร้างขึ้นผ่านเส้นทางที่กำหนด

การใช้ประโยชน์จากคุณลักษณะนี้ช่วยให้คุณจัดการสถาปัตยกรรมการกำหนดเส้นทางของคุณได้อย่างแม่นยำ อำนวยความสะดวกในการพัฒนากลไกการจัดการเส้นทางที่ปรับให้เหมาะกับข้อกำหนดการใช้งานเฉพาะของคุณ

การจัดการการกำหนดเส้นทางในแอปพลิเคชัน React

React ไม่ได้เสนอโซลูชันสำหรับการจัดการการนำทางภายในแอปพลิเคชันโดยเนื้อแท้ อย่างไรก็ตาม React Router ได้รับการออกแบบมาโดยเฉพาะเพื่อตอบสนองความต้องการนี้โดยมอบชุดส่วนประกอบและฟังก์ชันการกำหนดเส้นทางที่ครอบคลุมซึ่งอำนวยความสะดวกในการสร้างอินเทอร์เฟซที่ตอบสนองสูงและใช้งานง่าย ด้วยการใช้คุณสมบัติเหล่านี้ นักพัฒนาสามารถสร้างแอพพลิเคชั่นที่มีความสามารถในการนำทางที่ราบรื่น ในขณะเดียวกันก็รับประกันประสบการณ์ผู้ใช้ที่ดีที่สุด