🔵 React

สอนทำ Dynamic Routing ใน React ด้วย useParams, Query Parameters และ useNavigate

7 นาที 17 views บันทึกเป็น PDF
สอนทำ Dynamic Routing ใน React ด้วย useParams, Query Parameters และ useNavigate

เรียนรู้การทำระบบนำทางใน React ให้ยืดหยุ่นด้วย useParams, Query Parameters และ useNavigate เพื่อจัดการ URL และเปลี่ยนหน้าเว็บแบบมืออาชีพสำหรับมือใหม่

ทำไมเว็บเราต้องมีระบบนำทางแบบยืดหยุ่น

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

ถ้าเราต้องสร้างไฟล์หน้าเว็บแยกกันทุกครั้งที่มีข้อมูลใหม่ งานเราจะหนักมากและจัดการยากสุด ๆ Dynamic Routing (การเปลี่ยนเส้นทางหน้าเว็บโดยอ้างอิงข้อมูล) จึงเข้ามาแก้ปัญหานี้ โดยการใช้เส้นทางเดียวแต่เปลี่ยนรายละเอียดข้างในตามค่าที่ส่งมา

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

ใช้ useParams เพื่อดึงข้อมูลจาก URL

URL Parameters (ข้อมูลที่เป็นตัวแปรอยู่ในที่อยู่เว็บไซต์) คือการฝากค่าไว้บนลิงก์ เช่น /user/1 หรือ /product/abc ตัวเลขหรือตัวอักษรหลังเครื่องหมายทับ คือค่าที่เราเอาไปใช้ค้นหาข้อมูลต่อได้

ใน React เราจะใช้ฟังก์ชันที่ชื่อว่า useParams (คำสั่งดึงค่าตัวแปรจากที่อยู่เว็บ) เพื่อหยิบค่าเหล่านั้นออกมาใช้งานในโค้ดของเราได้ง่าย ๆ เพียงแค่ประกาศตัวแปรให้ตรงกับชื่อที่เราตั้งไว้ในตอนกำหนดเส้นทาง

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

// ตัวอย่างการกำหนดเส้นทางใน App.js
<Route path="/product/:id" element={<ProductDetail />} />

// ตัวอย่างการดึงค่าใน ProductDetail.js
import { useParams } from 'react-router-dom';

function ProductDetail() {
  const { id } = useParams(); // ดึงค่า id ออกมาจาก URL
  return <h1>กำลังดูสินค้าชิ้นที่: {id}</h1>;
}

โค้ดด้านบนแสดงวิธีดึงค่า id ออกมาใช้ ถ้าเราเข้าเว็บ /product/123 หน้าจอจะแสดงข้อความว่า "กำลังดูสินค้าชิ้นที่: 123" ทันที โดยที่คอมโพเนนต์ ProductDetail ทำหน้าที่เพียงแค่แสดงผลตามค่าที่รับมา

การใช้ Query Parameters เพื่อกรองข้อมูล

Query Parameters (ข้อมูลเสริมที่ต่อท้าย URL หลังเครื่องหมายคำถาม) ใช้สำหรับส่งค่าที่ไม่ได้เป็นส่วนหนึ่งของโครงสร้างหลัก เช่น การค้นหาหรือการเรียงลำดับข้อมูลในหน้าเว็บ เช่น /search?keyword=react

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

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

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

function SearchPage() {
  const [searchParams] = useSearchParams();
  const query = searchParams.get("keyword"); // ดึงค่าหลัง keyword=

  return <p>ผลการค้นหาสำหรับ: {query}</p>;
}

เมื่อผู้ใช้เข้าเว็บ /search?keyword=javascript ตัวแปร query จะมีค่าเป็น "javascript" ทันที ทำให้เราสามารถนำค่านี้ไปใช้เรียกข้อมูลจากฐานข้อมูลเพื่อแสดงผลลัพธ์ที่ถูกต้องให้ผู้ใช้เห็นได้

การเปลี่ยนหน้าด้วย Programmatic Navigation

ปกติการเปลี่ยนหน้าเราใช้ <Link> (ปุ่มกดเปลี่ยนหน้า) แต่บางครั้งเราต้องเปลี่ยนหน้าเองผ่านโค้ด เช่น หลังจากกดปุ่มล็อกอินสำเร็จแล้วให้เด้งไปหน้าแรก หรือกดปุ่มชำระเงินแล้วไปหน้าสรุปรายการ

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

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

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

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

  const handleLogin = () => {
    // ทำงานล็อกอินเสร็จแล้ว...
    navigate('/dashboard'); // สั่งให้ย้ายหน้าไปที่ /dashboard
  };

  return <button onClick={handleLogin}>เข้าสู่ระบบ</button>;
}

โค้ดตัวอย่างนี้แสดงการเปลี่ยนหน้าหลังจากที่ผู้ใช้คลิกปุ่ม handleLogin จะทำงานก่อน แล้วตามด้วย navigate('/dashboard') เพื่อพาผู้ใช้ไปยังหน้าถัดไปทันที เป็นวิธีที่ใช้บ่อยมากในระบบจัดการสมาชิก

ข้อควรระวังและแนวปฏิบัติที่ดี

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

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

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

สรุป: เอาไปใช้จริงในงานโปรแกรมเมอร์

การเข้าใจเรื่อง useParams, useSearchParams และ useNavigate คือก้าวสำคัญที่เปลี่ยนจากคนเขียนเว็บหน้าเดียวเป็นคนทำเว็บแอปพลิเคชันที่สมบูรณ์แบบ คุณสามารถเอาความรู้นี้ไปสร้างระบบจัดการข้อมูลที่คุณต้องการได้เลย

ตัวอย่างเช่น ถ้าคุณกำลังทำโปรเจกต์ Portfolio (แฟ้มสะสมผลงาน) คุณสามารถใช้ useParams เพื่อทำหน้าแสดงรายละเอียดโปรเจกต์แต่ละชิ้น โดยใช้ลิงก์ /project/:id เพียงหน้าเดียว แต่แสดงผลลัพธ์ต่างกันตาม ID ที่คลิกเข้ามาได้ทันที

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

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

สอนวิธี Build และ Deploy โปรเจกต์ React ขึ้นเว็บจริงด้วย Vercel และ Netlify
React

สอนวิธี Build และ Deploy โปรเจกต์ React ขึ้นเว็บจริงด้วย Vercel และ Netlify

เรียนรู้วิธีเตรียมโปรเจกต์ React ให้พร้อมใช้งานจริงผ่านคำสั่ง npm run build จัดการไฟล์ .env ให้ปลอดภัย และขั้นตอนการ Deploy ขึ้น Vercel แบบมือโปร

1 month ago 8 นาที
20 views
React Workshop Part 2: สอนจัดการ State, ดึงข้อมูล API และทำระบบ CRUD แบบมืออาชีพ
React

React Workshop Part 2: สอนจัดการ State, ดึงข้อมูล API และทำระบบ CRUD แบบมืออาชีพ

เรียนรู้การใช้ State และ useEffect ใน React เพื่อดึงข้อมูลจาก API พร้อมฝึกทำระบบตะกร้าสินค้าด้วย CRUD เพื่อให้เว็บของคุณโต้ตอบกับผู้ใช้งานได้จริง

1 month ago 8 นาที
24 views
สอนเขียน React เบื้องต้น: ออกแบบโครงสร้างแอปและสร้าง Component อย่างมืออาชีพ
React

สอนเขียน React เบื้องต้น: ออกแบบโครงสร้างแอปและสร้าง Component อย่างมืออาชีพ

เรียนรู้วิธีวางโครงสร้างแอป React แบบมือโปรด้วยการแบ่ง Component ช่วยให้โค้ดสะอาด จัดการง่าย และนำกลับมาใช้ซ้ำได้ พร้อมตัวอย่างการส่งข้อมูลผ่าน Props

1 month ago 6 นาที
11 views