0Pricing
React Academy · درس

تصحيح أخطاء React الشائعة

شخّصوا تحذيرات المفاتيح المفقودة وأخطاء الحالة غير المعرّفة وأخطاء hydration

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

مرحباً

في هذا الدرس ستشخّص أخطاء React الأكثر شيوعاً: تحذيرات المفاتيح المفقودة، وأخطاء الحالة غير المعرّفة، وكثرة عمليات إعادة التصيير، وحالات عدم تطابق hydration.

تحذير المفتاح المفقود

يسجّل React الرسالة: *يجب أن يكون لكل عنصر فرعي في قائمة prop فريد باسم "key".* يحدث ذلك عند تصيير مصفوفة من دون إضافة prop باسم `key`. أصلح المشكلة بإضافة مفتاح ثابت وفريد إلى كل عنصر في القائمة.
// Bad
items.map(item => <li>{item.name}</li>)

// Good
items.map(item => <li key={item.id}>{item.name}</li>)

تعذّر قراءة خصائص undefined

يعني هذا الانهيار غالباً أن حالتك تساوي `undefined` أثناء التصيير الأول. ابدأ الحالة دائماً بقيمة افتراضية آمنة (`[]` للمصفوفات، و`{}` للكائنات، و`null` للقيم التي تتحقق منها قبل استخدامها).
// Bad — crashes if data is undefined
const [data, setData] = useState();
return <p>{data.name}</p>;

// Good
const [data, setData] = useState(null);
return data ? <p>{data.name}</p> : <p>Loading...</p>;

خطأ كثرة عمليات إعادة التصيير

يطرح React الخطأ *كثرة عمليات إعادة التصيير* عندما يدخل أحد المكوّنات في حلقة تصيير لا نهائية — ويحدث ذلك عادةً لأنك تستدعي `setState` بشكل غير مشروط أثناء التصيير، أو تمرّر مباشرةً دالة مضمّنة مثل `() => setState(...)` كخاصية تُشغَّل في كل عملية تصيير.
// Bad — setState called on every render
function Counter() {
  const [n, setN] = useState(0);
  setN(n + 1); // infinite loop!
  return <p>{n}</p>;
}

إصلاح كثرة عمليات إعادة التصيير

انقل تحديثات الحالة إلى معالجات الأحداث أو استخدم useEffect. لا تستدعِ setState مباشرةً في المستوى الأعلى من جسم المكوّن.
// Good — update only on click
function Counter() {
  const [n, setN] = useState(0);
  return <button onClick={() => setN(n + 1)}>{n}</button>;
}

تحذير عدم تطابق hydration

في تطبيقات SSR، يحذّر React قائلاً: *فشلت عملية hydration لأن واجهة المستخدم الأولية لا تطابق ما صُيّر على الخادم.* ومن الأسباب الشائعة استخدام `Date.now()` أو `Math.random()` أثناء التصيير، أو حقن إضافات المتصفح لعناصر HTML.

إصلاح حالات عدم تطابق hydration

انقل القيم الديناميكية، مثل الطوابع الزمنية والمعرّفات العشوائية، إلى `useState` تتم تهيئته داخل `useEffect`، بحيث يصيّر الخادم دائماً قيمة ثابتة، ثم يحدّث العميل القيمة بعد التركيب.
const [ts, setTs] = useState('');
useEffect(() => {
  setTs(Date.now().toString());
}, []);
return <p>{ts}</p>;

عدم تحديث الحالة فوراً

تذكّر أن `setState` غير متزامن. يؤدي تسجيل الحالة مباشرةً بعد استدعائه إلى عرض القيمة القديمة. لرؤية القيمة المحدّثة، سجّلها داخل `useEffect` يعتمد على متغيّر الحالة.
const [count, setCount] = useState(0);

function handleClick() {
  setCount(count + 1);
  console.log(count); // still old value!
}

useEffect(() => {
  console.log('updated:', count); // correct
}, [count]);

عدم تحديث المكوّن عند تغيّر الخاصية

إذا لم يتحدّث المكوّن عند تغيّر إحدى الخصائص، فتحقّق من أنك لا تعدّل كائناً أو مصفوفةً في مكانها. يستخدم React مساواة المراجع — وتعديل كائن موجود لا يؤدي إلى إعادة التصيير.
// Bad — same reference, no re-render
const list = [];
list.push('item');
setList(list);

// Good — new array reference
setList([...list, 'item']);

قراءة الأخطاء في طبقة عرض الأخطاء

عندما يتعطّل تطبيق React أثناء التطوير، تظهر طبقة لعرض الخطأ في المتصفح. اقرأ **مكدس المكوّنات** في الأسفل — فهو يعرض كل مكوّن صَيّر المكوّن الذي فشل، ما يوضّح مصدر الخطأ.

تحقّق سريعاً

ما السبب الأكثر شيوعاً لخطأ React «كثرة عمليات إعادة التصيير»؟

مراجعة

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

اكتمل المقرر

تهانينا! لقد أتممت **React DevTools & Debugging**. يمكنك الآن تثبيت DevTools، وفحص أشجار المكوّنات والحالة، وتحليل عمليات التصيير، وتشخيص أخطاء React الأكثر شيوعاً أثناء التشغيل.

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

هل درس «تصحيح أخطاء React الشائعة» مجاني؟

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

ماذا ستتعلم في «تصحيح أخطاء React الشائعة»؟

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

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

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

كم من الوقت يستغرق درس «تصحيح أخطاء React الشائعة»؟

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

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

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

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

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