0Pricing
React Academy · درس

رفع الحالة إلى الأعلى: المبادئ والأمثلة

انقلوا الحالة المشتركة إلى أقرب سلف مشترك ومرّروها إلى الأسفل عبر props

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

مرحبًا

في هذا الدرس ستتعلم نمط رفع الحالة إلى الأعلى، أي نقل الحالة المشتركة إلى السلف المشترك الأقرب حتى تظل المكوّنات الشقيقة متزامنة.

المشكلة: المكوّنات الشقيقة غير المتزامنة

عندما تحتاج مكوّنان شقيقان إلى البيانات نفسها، فإن الاحتفاظ بحالة منفصلة في كل منهما يؤدي إلى أخطاء في المزامنة. والحل هو نقل الحالة إلى المكوّن الأب المشترك بينهما.

تحديد السلف المشترك

ابحث عن أقرب مكوّن يكون أبًا **لكلا** المكوّنين اللذين يحتاجان إلى البيانات المشتركة. انقل الحالة إليه ومرّرها إلى الأسفل باعتبارها خصائص.
function Parent() {
  const [value, setValue] = useState('');
  return (
    <>
      <InputA value={value} onChange={setValue} />
      <PreviewB value={value} />
    </>
  );
}

مثال على رفع حالة العداد

لنفترض أن مكوّنين يعرضان العداد نفسه. بدلًا من إدارة count في كل منهما، ارفعها إلى المكوّن الأب. سيتلقى كلاهما count باعتبارها خاصية، ويستدعيان استدعاءً عكسيًا باسم onChange لتحديثها.
function App() {
  const [count, setCount] = useState(0);
  return (
    <>
      <CounterDisplay count={count} />
      <CounterControl count={count} onIncrement={() => setCount(c => c + 1)} />
    </>
  );
}

خصائص الاستدعاء العكسي للتحديثات

لا تستطيع children تعديل حالة المكوّن الأب مباشرةً. يمرر المكوّن الأب استدعاءً عكسيًا، مثل `onChange`، باعتباره خاصية. وتستدعي children هذا الاستدعاء عندما تريد طلب تغيير في الحالة.

المكوّن المتحكم فيه مقابل غير المتحكم فيه بعد رفع الحالة

بعد رفع الحالة، يصبح child الذي كان يملك الحالة سابقًا **مكوّنًا متحكمًا فيه**؛ إذ يتلقى القيمة الحالية وonChange من المكوّن الأب. ويصبح المكوّن الأب المصدر الوحيد للحقيقة.

رفع الحالة عبر عدة مستويات

أحيانًا تحتاج إلى رفع الحالة عدة مستويات إلى الأعلى في الشجرة. وإذا احتجت إلى رفعها عبر العديد من المكوّنات الوسيطة، فاستخدم Context بدلًا من ذلك لتجنب تمرير الخصائص عبر المكوّنات.

فوائد رفع الحالة

يوفر رفع الحالة مصدرًا واحدًا للحقيقة، ويجعل تدفق البيانات متوقعًا، إذ يتجه دائمًا من الأعلى إلى الأسفل، ويبسط تصحيح الأخطاء، ويسهّل إضافة مستهلكين آخرين للحالة نفسها لاحقًا.

الحالة المشتقة من الحالة المرفوعة

احسب القيم المشتقة من الحالة المرفوعة داخل المكوّن الأب، ثم مرّرها باعتبارها خصائص إضافية. لا تكرر الحالة أبدًا؛ بل اشتقها.
const [items, setItems] = useState([]);
const filteredItems = items.filter(i => i.done); // derived, not separate state

متى يصبح رفع الحالة مفرطًا؟

إذا وجدت نفسك ترفع الحالة عبر 4 مستويات أو أكثر، فقد تكون بنية شجرة المكوّنات غير صحيحة، أو حان وقت استخدام Context أو مكتبة لإدارة الحالة.

اختبار سريع

ما النهج الصحيح عندما يحتاج مكوّنان شقيقان إلى مشاركة الجزء نفسه من الحالة؟

مراجعة

ارفع الحالة إلى السلف المشترك الأقرب عندما تحتاج المكوّنات الشقيقة إلى مشاركتها. مرّر القيمة الحالية إلى الأسفل واستدعاءات تغيير الحالة إلى الأعلى. واشتق القيم بدلًا من تكرار الحالة.

التالي

الدرس التالي: **تمرير الخصائص عبر المكوّنات: متى يسبب مشكلة ومتى يكون مناسبًا** — ستحدّد سلاسل تمرير الخصائص التي تسبب مشكلات، وتقرّر متى تحتاج إلى حل.

الأسئلة الشائعة

هل درس «رفع الحالة إلى الأعلى: المبادئ والأمثلة» مجاني؟

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

ماذا ستتعلم في «رفع الحالة إلى الأعلى: المبادئ والأمثلة»؟

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

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

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

كم من الوقت يستغرق درس «رفع الحالة إلى الأعلى: المبادئ والأمثلة»؟

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

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

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

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

  1. رفع الحالة إلى الأعلى: المبادئ والأمثلة
  2. تمرير Props عبر مستويات متعددة: متى يسبب مشكلة ومتى يكون مناسبًا
  3. أنماط التواصل بين المكوّنات الشقيقة
  4. اختيار الموقع المناسب للحالة
← العودة إلى React Academy