0Pricing
React Academy · درس

إدارة الحالة في معاملات البحث ضمن URL

زامن عوامل التصفية والترتيب وتقسيم الصفحات مع URL باستخدام useSearchParams.

إدارة الحالة في معاملات البحث ضمن URL درس مجاني في React Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

لماذا نخزّن الحالة في عنوان URL؟

يجب وضع عوامل التصفية واستعلامات البحث وترتيب النتائج وتقسيم الصفحات في عنوان URL، حتى يتمكن المستخدمون من حفظ العرض نفسه في الإشارات المرجعية ومشاركته والعودة إليه من دون فقدان حالته.

‏useSearchParams Hook

تُعيد 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» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «إدارة الحالة في معاملات البحث ضمن URL»؟

زامن عوامل التصفية والترتيب وتقسيم الصفحات مع URL باستخدام useSearchParams. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «إدارة الحالة في معاملات البحث ضمن URL»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. المسارات المتداخلة وتخطيطات Outlet
  2. أدوات التحميل والإجراءات (واجهة Data Router)
  3. المسارات المحمية وحواجز المصادقة
  4. إدارة الحالة في معاملات البحث ضمن URL
← العودة إلى React Academy