איך אתה יכול לשכנע את React ששני שימושים ברכיב זקוקים למצב אינדיבידואלי משלהם? עם מפתחות, כמובן!
גישת React יכולה להיות די מסובכת, ואתה עלול להיתקל בהתנהגות בלתי צפויה או אפילו באגים עדינים. להיפטר מבאגים כאלה יכול להיות די קשה אם אתה לא מכיר את הסיבה שלהם.
באג מסוים מתעורר כאשר אתה מעבד באופן מותנה את אותו רכיב עם מאפיינים שונים. חקור את הבאג הזה בפירוט וגלה כיצד להשתמש במקשי React כדי לפתור אותו.
רכיבי React אינם תמיד עצמאיים
התחביר הפשוט שלו הוא אחת הסיבות העיקריות כדאי ללמוד React. אבל, למרות יתרונות רבים, המסגרת אינה נטולת באגים.
הבאג שאליו תלמד כאן מתרחש כאשר אתה מעבד את אותו רכיב באופן מותנה, אך מעביר לו אביזרים שונים.
במקרים כאלה, React תניח ששני הרכיבים זהים, כך שהיא לא תטרח לרנדר את הרכיב השני. כתוצאה מכך, כל מצב שתגדיר ברכיב הראשון יימשך בין העיבודים.
כדי להדגים, קח דוגמה זו. ראשית, יש לך את הדברים הבאים דֶלְפֵּק רְכִיב:
זֶה דֶלְפֵּק רכיב מקבל א שֵׁם מההורה דרך הרס אובייקט, שזו דרך לעשות זאת השתמש באביזרים ב-React. ואז זה מעבד את השם ב-a. זה גם מחזיר שני לחצנים: אחד כדי להפחית את לספור במצב והשני להגדיל אותו.
זכור שאין שום דבר רע בקוד לעיל. הבאג מגיע מבלוק הקוד הבא (רכיב האפליקציה), המשתמש במונה:
כברירת מחדל, הקוד לעיל מציג את המונה בשם Kingsley. אם תגדיל את המונה לחמש ותלחץ על לְהַחלִיף כפתור, זה יציג את המונה השני בשם סאלי.
אבל הבעיה היא שהמונה לא יתאפס למצב ברירת המחדל שלו של אפס אחרי שהחלפת אותם.
באג זה מתרחש מכיוון ששני המצבים מציגים את אותם אלמנטים באותו סדר. React לא יודע שדלפק "קינגסלי" שונה מדלפק "סאלי". ההבדל היחיד הוא ב שֵׁם prop אבל, למרבה הצער, React לא משתמש בזה כדי להבדיל בין אלמנטים.
אתה יכול לעקוף את הבעיה בשתי דרכים. הראשון הוא על ידי שינוי ה-DOM שלך והפיכת שני העצים שונים. זה מחייב אותך להבין מהו ה-DOM. לדוגמה, אתה יכול לעטוף את הדלפק הראשון בתוך א אלמנט והשני בתוך a אֵלֵמֶנט:
אם תגדיל את מונה "קינגסלי" ולחץ לְהַחלִיף, המצב מתאפס ל-0. שוב, זה קורה כי המבנה של שני עצי ה-DOM שונה.
כאשר זה קינגסלי משתנה הוא נָכוֹן, המבנה יהיה div >div > דֶלְפֵּק (div המכיל div, המכיל Counter). כאשר אתה מחליף את מצב המונה באמצעות הכפתור, המבנה הופך div > סָעִיף > דֶלְפֵּק. בגלל אי התאמה זו, React תציג אוטומטית מונה חדש עם מצב איפוס.
אולי לא תמיד תרצה לשנות את המבנה של הסימון שלך כך. הדרך השנייה לפתור באג זה מונעת את הצורך בעיצוב שונה.
שימוש במפתחות לעיבוד רכיב טרי
המקשים מאפשרים ל-React להבדיל בין אלמנטים במהלך תהליך הרינדור. אז אם יש לך שני אלמנטים זהים לחלוטין, ואתה רוצה לאותת ל-React שאחד שונה מהשני, עליך להגדיר תכונת מפתח ייחודית לכל אלמנט.
עכשיו, בכל פעם שאתה מחליף בין ה רכיבים עבור קינגסלי וסאלי, אתה משנה אוטומטית את תכונת המפתח של הקלט שלך בין "קינגסלי" ל"סאלי". זה יאלץ את React לעבד מחדש לחלוטין את רכיב הקלט בכל לחיצה על הכפתור.
טיפים נוספים למיטוב יישומי React
אופטימיזציה של קוד היא המפתח ליצירת חווית משתמש נעימה באינטרנט או באפליקציה שלך לנייד. ידיעה על טכניקות אופטימיזציה שונות יכולה לעזור לך להפיק את המרב מיישומי React שלך.
החלק הטוב ביותר הוא שאתה יכול ליישם את רוב טכניקות האופטימיזציה הללו גם עם יישומי React Native.