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

การจัดการสถานะในพารามิเตอร์ค้นหาของ URL

ซิงค์ตัวกรอง การเรียงลำดับ และการแบ่งหน้าไปยัง URL ด้วย useSearchParams

การจัดการสถานะในพารามิเตอร์ค้นหาของ URL เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องเก็บสถานะไว้ใน URL

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

ฮุก useSearchParams

useSearchParams() จะส่งคืนอินสแตนซ์ URLSearchParams ปัจจุบันและฟังก์ชันตั้งค่า ซึ่งคล้ายกับ useState แต่มี URL เป็นแหล่งเก็บสตริงคิวรี

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

function ProductList() {
  const [searchParams, setSearchParams] = useSearchParams();
  const query = searchParams.get('q') || '';
  const page = Number(searchParams.get('page') || 1);
  // ...
}

การอ่านพารามิเตอร์เดียว

ใช้ searchParams.get('key') เพื่ออ่านค่า โดยจะส่งคืน null หากไม่มีพารามิเตอร์ดังกล่าว ดังนั้นควรกำหนดค่าทดแทนไว้

const sort = searchParams.get('sort') ?? 'name';
const order = searchParams.get('order') ?? 'asc';

การเขียนพารามิเตอร์โดยไม่เปลี่ยนเส้นทาง

เรียกใช้ setSearchParams() พร้อมออบเจ็กต์ใหม่หรือฟังก์ชันอัปเดตเพื่อเปลี่ยนพารามิเตอร์ React Router จะอัปเดต URL และแสดงผลใหม่โดยไม่เปลี่ยนเส้นทางทั้งหมด

function SortButton({ field }) {
  const [searchParams, setSearchParams] = useSearchParams();
  const handleClick = () => {
    setSearchParams(prev => {
      prev.set('sort', field);
      prev.set('page', '1');
      return prev;
    });
  };
  return <button onClick={handleClick}>Sort by {field}</button>;
}

การรักษาพารามิเตอร์อื่นขณะอัปเดต

ใช้รูปแบบฟังก์ชันอัปเดตของ setSearchParams เพื่อเปลี่ยนเฉพาะพารามิเตอร์ที่ต้องการ โดยคงพารามิเตอร์อื่นทั้งหมดไว้เหมือนเดิม

setSearchParams(prev => {
  prev.set('q', newQuery);
  // 'sort' and 'page' are unchanged
  return prev;
});

การซิงค์อินพุตกับพารามิเตอร์ค้นหา

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

function SearchBar() {
  const [params, setParams] = useSearchParams();
  const q = params.get('q') || '';
  return (
    <input
      value={q}
      onChange={e => setParams(prev => {
        prev.set('q', e.target.value);
        prev.set('page', '1');
        return prev;
      })}
    />
  );
}

แฟล็กบูลีนในพารามิเตอร์ค้นหา

ใช้การมีอยู่หรือไม่มีอยู่ของพารามิเตอร์ (หรือสตริง '1'/'0') เพื่อแทนสถานะส่วนติดต่อผู้ใช้แบบบูลีน เช่น แผงที่เปิดอยู่หรือตัวกรองที่ใช้งานอยู่

const showFilters = searchParams.has('filters');

const toggleFilters = () => {
  setSearchParams(prev => {
    if (prev.has('filters')) prev.delete('filters');
    else prev.set('filters', '1');
    return prev;
  });
};

ค่าอาร์เรย์ในพารามิเตอร์ค้นหา

URLSearchParams รองรับหลายค่าสำหรับคีย์เดียวกัน ใช้ getAll('key') เพื่ออ่านค่าเหล่านั้นเป็นอาร์เรย์

// URL: /products?tag=react&tag=typescript
const tags = searchParams.getAll('tag'); // ['react', 'typescript']

// Setting multiple values:
const newParams = new URLSearchParams();
selectedTags.forEach(t => newParams.append('tag', t));
setSearchParams(newParams);

การแทนที่เทียบกับการเพิ่มประวัติ

ส่ง { replace: true } เป็นอาร์กิวเมนต์ตัวที่สองให้กับ setSearchParams เพื่อไม่ให้การเปลี่ยนตัวกรองเพิ่มรายการจำนวนมากลงในประวัติเบราว์เซอร์

setSearchParams(prev => { prev.set('q', val); return prev; }, { replace: true });

การคำนวณสถานะจากพารามิเตอร์

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

const rawPage = searchParams.get('page');
const page = Math.max(1, parseInt(rawPage || '1', 10));

const rawSort = searchParams.get('sort');
const sort = ['name', 'price', 'date'].includes(rawSort) ? rawSort : 'name';

การเชื่อมโยงด้วยพารามิเตอร์ค้นหา

ใช้พร็อพเพอร์ตี search บนออบเจ็กต์ Link หรือ to เพื่อเปลี่ยนไปยัง URL ที่กำหนดพารามิเตอร์คิวรีไว้

<Link to={{ pathname: '/products', search: '?sort=price&order=asc' }}>
  Sort by Price
</Link>

ตรวจสอบอย่างรวดเร็ว

เมธอดใดของ URLSearchParams ที่ใช้อ่านค่าทั้งหมดของคีย์ที่ซ้ำกัน เช่น ?tag=react&tag=ts

สรุปทบทวน

useSearchParams() ซิงค์สถานะของคอมโพเนนต์กับสตริงคิวรีใน URL ใช้รูปแบบตัวอัปเดตเพื่อรักษาพารามิเตอร์อื่นไว้ ใช้ { replace: true } เพื่อหลีกเลี่ยงประวัติที่มีรายการมากเกินไป และใช้ getAll() สำหรับพารามิเตอร์ที่มีค่าเป็นอาร์เรย์

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

บทเรียน “การจัดการสถานะในพารามิเตอร์ค้นหาของ URL” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การจัดการสถานะในพารามิเตอร์ค้นหาของ URL”

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

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

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

บทเรียน “การจัดการสถานะในพารามิเตอร์ค้นหาของ URL” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เส้นทางซ้อนกันและเลย์เอาต์ Outlet
  2. ตัวโหลดและแอ็กชัน (Data Router API)
  3. เส้นทางที่มีการป้องกันและตัวตรวจสอบสิทธิ์
  4. การจัดการสถานะในพารามิเตอร์ค้นหาของ URL
← กลับไปที่ React Academy