Master React Lists and Keys

רינדור רשימות ב-React הוא פשוט, אבל לעשות זאת נכון זה קשה.

מפתחים רבים משתמשים באינדקס המערך כמפתח (key). זו טעות. זה מוביל לבאגים ולביצועים איטיים.

כך עליכם לנהל נתונים דינמיים ב-React.

How React Uses Lists React משתמשת במתודה map() כדי להפוך מערכים לאלמנטים של ממשק משתמש (UI). כשמשתמשים ב-map(), React הופכת כל פיסת נתונים לרכיב (component).

The Role of Keys React משתמשת ב-Virtual DOM. כאשר הנתונים משתנים, React משווה את הנתונים החדשים לנתונים הישנים. תהליך זה נקרא reconciliation.

מפתחות משמשים כמזהים ייחודיים. הם אומרים ל-React בדיוק איזה פריט השתנה, עבר מקום או נמחק.

Why Using Index as a Key is Dangerous שימוש באינדקס (0, 1, 2...) כמפתח גורם לשלוש בעיות עיקריות:

  • שגיאות במצב הרכיב (Component State): אם ממיינים רשימה, שדות קלט או תיבות סימון (checkboxes) עלולים להציג נתונים מפריט לא נכון.
  • ירידה בביצועים: React אינה יכולה לעקוב אחרי זהות הפריטים. לעיתים קרובות היא מבצעת רינדור מחדש (re-render) לכל הרשימה במקום רק לפריט אחד.
  • באגים ויזואליים: ממשק המשתמש עשוי להיראות תקין, אך הלוגיקה הפנימית תיכשל כאשר הפריטים יזוזו.

The Right Way to Use Keys כדי לשמור על האפליקציה שלכם מהירה ויציבה, עקבו אחר הכללים הבאים:

  • השתמשו במזהים ייחודיים (Unique IDs): השתמשו תמיד במזהים (IDs) מהדאטה-בייס שלכם (כמו UUID או מפתח ראשי/primary key).
  • לעולם אל תשתמשו ב-Math.random(): יצירת מפתחות במהלך הרינדור גורמת ל-React ליצור מחדש כל אלמנט בכל עדכון. זה הורס את הביצועים.
  • שמרו על מפתחות יציבים: מפתח חייב להישאר זהה עבור אותה פיסת נתונים לאורך כל מחזור החיים שלה.

Comparison at a Glance

תכונה: יציבות שימוש באינדקס: לא יציב שימוש במזהה ייחודי: יציב מאוד

תכונה: ביצועים שימוש באינדקס: גרועים שימוש במזהה ייחודי: אופטימליים

תכונה: בטיחות המצב (State Safety) שימוש באינדקס: לא בטוח שימוש במזהה ייחודי: בטוח ב-100%

Summary for Developers השתמשו במתודה map(). העבירו מזהה (ID) ייחודי ויציב ל-key prop. הימנעו משימוש באינדקס המערך עבור כל רשימה שיכולה להשתנות, להיומיין או להיות מסוננת.

Source: https://dev.to/banti_kevat_8e2d123bb7994/react-me-lists-aur-keys-kaise-use-karein-explained-in-hindi-c64