You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
### من أين تحصل على `key` الخاص بك {/*where-to-get-your-key*/}
403
401
404
402
المصادر المخلتفة للبيانات تقدم مصادر مختلفة للمفاتيح:
405
403
406
-
***البيانات من قواعد البيانات:** إذا كانت بياناتك قادمة من قاعدة بيانات، يمكنك استخدام keys/IDs الخاصة بقاعدة البيانات, والتي هي فريدة بطبيعتها.
407
-
***البيانات التي تم توليدها محلياً:** إذا كانت بياناتك مولدة ومستمرة محلياً (الملاحظات في تطبيق تدوين الملاحظات)، تستخدم عداد متزايد، [`crypto.randomUUID()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID) أو حزمة مثل [`uuid`](https://www.npmjs.com/package/uuid) عندما تنشأ العناصر.
404
+
***البيانات من قواعد البيانات:** إذا كانت بياناتك قادمة من قاعدة بيانات، يمكنك استخدام المفاتيح أو المعرفات الفريدة التي تقدمها قواعد البيانات.
405
+
***البيانات التي تم توليدها محلياً:** إذا كانت بياناتك مولدة ومستمرة محلياً (مثل: الملاحظات في تطبيق تدوين الملاحظات)، استخدم عداد متزايد، [`crypto.randomUUID()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID) أو حزمة مثل [`uuid`](https://www.npmjs.com/package/uuid) عندما تنشأ العناصر.
408
406
409
407
### قواعد المفاتيح {/*rules-of-keys*/}
410
408
411
-
***المفاتيح يجب أن تكون فريدة بين الأشقاء.** على أي حال، إنه من الصحيح استخدام المفاتيح نفسها لعقد JSX في مصفوفات _مختلفة_.
412
-
***المفاتيح لا يجب أن تتغير** أو إحباط أهدافها! لا تقم بتوليدهم خلال التصيير.
409
+
***المفاتيح يجب أن تكون فريدة بين الأشقاء.** على أي حال،ورغم ذلك، لا مشكلة في استخدام المفاتيح نفسها لعناصر JSX في مصفوفات _مختلفة_.
410
+
***يجب ألا تتغير المفاتيح** أو يتم إحباط أهدافها! لا تقم بتوليدهم أثناء التصيير.
413
411
414
-
### لماذا تحتاج React مفاتيح? {/*whخy-does-react-need-keys*/}
412
+
### لماذا تحتاج React مفاتيح? {/*why-does-react-need-keys*/}
415
413
416
414
تخيل بأنّ الملفات على حاسوبك لا تمتلك أسماء. بدلاً من ذلك أنت ترجع إليهم عن طريق ترتيبهم -- الملف الأول، الملف الثاني، إلخ. يمكنك اعتياد ذلك، لكن بمجرد حذفك لملف، يمكن أن يصبح الأمر غير مقبول. الملف الثاني يصبح الملف الاول، الملف الثالث يصبح الملف الثاني، وهكذا.
417
415
418
-
أسماء الملفات في مجلد ومفاتيح JSX في مصفوفة تخدم نفس الهدف. إنها تمكننا من تحديد عنصر بشكل فريد بين أشقائه. الاختيار الجيد للمفتاح يقدم معلومات أكثر من الموضع خلال المصفوفة. وحتى لو تغير _الموضع_ بسبب إعادة الترتيب، ال `key` يمكن React من تحديد العنصر خلال حياته.
416
+
أسماء الملفات في مجلد ومفاتيح JSX في مصفوفة تخدم نفس الهدف. إنها تمكننا من تحديد عنصر بشكل فريد بين أشقائه. الاختيار الجيد للمفتاح يقدم معلومات أكثر من الموضع خلال المصفوفة. وحتى لو تغير _الموضع_ بسبب إعادة الترتيب، ال `key` يمكن React من تحديد العنصر أثناء وجوده.
419
417
420
418
<Pitfall>
421
419
422
-
يمكن أن يكون استخدام فهرس العنصر في مصفوفة كمفتاح له مغرياً . في الحقيقة، ذلك ما ستستخدمه React إذا لم تحدد `key` على الإطلاق. لكن الترتيب المستخدم في تصيير العناصر سوف يتغير بمرور الوقت إذا تم إدخال عنصر، حذفه أو إذا تغير ترتيب المصفوفة. استخدام الفهرس كمفتاح سوف يؤدي إلى مشاكل خفية ومرفوضة في الكود.
420
+
يمكن أن يكون استخدام فهرس العنصر (index) في مصفوفة كمفتاح له مغرياً . في الحقيقة، ذلك ما ستستخدمه React إذا لم تحدد `key` على الإطلاق. لكن الترتيب المستخدم في تصيير العناصر سوف يتغير بمرور الوقت إذا تم إدخال عنصر، أو حذفه أو إذا تغير ترتيب المصفوفة. استخدام الفهرس كمفتاح يؤدي إلى مشاكل خفية ومرفوضة في الكود.
423
421
424
-
بالمثل لا تقلل من أهمية المفاتيخ عند توليدها، كاستخدام `key={Math.random()}`. هذا سيجعل المفاتيح غير متطابقة أبداً بين التصييرات، قائدة بذلك كل مكوناتك وDOM إلى أن يعاد إنشاؤها في كل مرة. ليس هذا بطيئاً فقط، بل سيفقد أي بيانات مدخلة من المستخدم داخل عناصر القائمة أيضاً، استخدم ID مستقراً معتمداً على البيانات.
422
+
بالمثل لا تقلل من أهمية المفاتيخ عند توليدها، كاستخدام `key={Math.random()}`. هذا سيجعل المفاتيح غير متطابقة أبداً بين التصييرات، مؤديةً بذلك كل مكوناتك وDOM إلى أن يعاد إنشاؤها في كل مرة. ليس هذا بطيئاً فقط، بل سيفقد أي بيانات مدخلة من المستخدم داخل عناصر القائمة أيضاً، استخدم ID مستقراً معتمداً على البيانات.
425
423
426
-
لاحظ أن مكوناتك لا تتلقى `key` كخاصية prop. إنها تستخدم فقط كتلميح ل React نفسه. إذا احتاج مكونك ID، عليك تمريره كخاصية منفصلة: `<Profile key={id} userId={id} />`.
424
+
لاحظ أن مكوناتك لا تتلقى `key` كخاصية (prop). إنها تستخدم فقط كتلميح ل React نفسه. إذا احتاج مكونك ID، عليك تمريره كخاصية منفصلة: `<Profile key={id} userId={id} />`.
0 commit comments