محتويات الدورة

React / المكونات والحالة / الدرس 6

القوائم والمفاتيح وهوية الحالة

اعرض المجموعات بهويات مستقرة وافهم حفظ الحالة بالموضع والنوع والمفتاح.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • عرض مجموعة من البيانات
  • إبقاء التحرير مع سجله
  • التحقق من الهوية بالتفاعل

عرض مجموعة من البيانات

استخدم map وfilter لإنتاج العناصر وافصل الاختيار عن العرض عند الوضوح. يحتاج كل شقيق عائد مباشرة مفتاحا مناسبا على حد العنصر. المفتاح بيانات للمطابقة لا id مرئية ولا prop عادية؛ مرر معرف المجال منفصلا عند الحاجة. احفظ قوائم HTML لأن مصفوفة React لا تنشئ العلاقة الدلالية وحدها.

المفاتيح هوية أشقاء مستقرة

يأتي المفتاح من هوية السجل ويبقى مع الترتيب وتحرير النص. يكفي تميزه بين الأشقاء. تعيد العشوائية أثناء العرض التركيب وقد تمحو الحقل والتركيز، وقد تخطئ الفهارس عند تغير المواضع. تختلف قائمة ثابتة لكن لا تعممها. اسأل هل يعني المفتاح العنصر المفهومي نفسه عبر الزمن.

إبقاء التحرير مع سجله

يعطي المثال كل صف مفتاح معرف ويعكس الترتيب. يملك الصف مسودة ابتدائية من التسمية فتبقى مع المعرف بعد التحرير والعكس. لا ينفذ ذلك مزامنة تغييرات الخادم؛ فلا يحدث تهيئة الحالة من prop تلقائيا عند تغيرها. حدد هل تحفظ المراجعة الجديدة المسودة أم تدمجها أم تعيدها بسياسة.

jsx وحدة مكون — تتطلب مضيف React الموضح بالمقرر
import { useState } from "react";
function Row({ item }) { const [draft, setDraft] = useState(item.label); return <li><label>{item.id}<input value={draft} onChange={e => setDraft(e.target.value)} /></label></li>; }
export default function App() { const [items, setItems] = useState([{ id: "a", label: "Alpha" }, { id: "b", label: "Beta" }]); return <main><h1>Stable rows</h1><button type="button" onClick={() => setItems(xs => [...xs].reverse())}>Reverse</button><ul>{items.map(item => <Row key={item.id} item={item} />)}</ul></main>; }
الناتج المتوقع
After editing row a and reversing, its edited value stays with a.

تتبع المسودة المعرف عند الترتيب لحفظ هوية Row.

استخدام المفتاح لإعادة الضبط عن قصد

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

jsx وحدة مكون — تتطلب مضيف React الموضح بالمقرر
import { useState } from "react";
function Editor({ name }) { const [draft, setDraft] = useState(name); return <label>Draft<input value={draft} onChange={e => setDraft(e.target.value)} /></label>; }
export default function App() { const [id, setId] = useState("a"); return <main><h1>Record editor</h1><button type="button" onClick={() => setId(x => x === "a" ? "b" : "a")}>Switch record</button><Editor key={id} name={id === "a" ? "Alpha" : "Beta"} /></main>; }
الناتج المتوقع
Initial draft: Alpha. After Switch record: Beta.

ينشئ تغير المفتاح محررا جديدا ويعيد المسودة لتسمية السجل المختار.

التحقق من الهوية بالتفاعل

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

الأخطاء الشائعة وإصلاحها

ينتقل النص لصف آخر بعد الترتيب

لماذا يحدث؟
تصف المفاتيح المواضع لا السجلات.
كيف تصلحه؟
استخدم معرفات المجال.
كيف تتجنب تكراره؟
اختبر التحرير ثم الترتيب.

يفقد كل عرض الحالة

لماذا يحدث؟
تتولد مفاتيح عشوائية أثناءه.
كيف تصلحه؟
احفظ الهوية.
كيف تتجنب تكراره؟
راجع توليدها بعيدا عن النص.

لا يقرأ الابن props.key

لماذا يحدث؟
المفتاح محجوز للمطابقة.
كيف تصلحه؟
مرر المعرف بخاصية عادية.
كيف تتجنب تكراره؟
افصل بيانات الهوية عن المدخلات.

اختبر فهمك

1. لماذا لا تصلح تسمية قابلة للتحرير مفتاحا لصفها؟

اعرض الحل المشروح

يغير التحرير المفتاح فيستبدل الهوية وقد يعيد الحالة والتركيز. احفظ معرفا ثابتا وعامل التسمية بيانات مجال تحدث بثبات.

2. متى ترفع المسودة فوق قائمة مصفاة؟

اعرض الحل المشروح

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

أهم ما تعلمته

  • تعرف المفاتيح الأشقاء عبر التغيير.
  • تتحكم الهوية بالحفظ وإعادة الضبط.
  • اختبر تغير القائمة مع حالة محررة.

المراجع الرسمية