PracticU

ניהול מערכים בתוך State ב-Class Component

בלי כתוביותעם כתוביות
PracticU › קורס ריאקט - React › ניהול מערכים בתוך State ב-Class Component
מילון מושגים:
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
סטייט - המידע על מצבו הנוכחי של רכיב או אפליקציה בזמן נתון, שמשתנה ומשפיע על מה שמוצג.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
React - ספריית JavaScript לבניית ממשקי משתמש מבוססי רכיבים, שפותחה על ידי פייסבוק.
אופרטור - סימן בקוד שמבצע פעולה על ערכים, כמו חיבור, השוואה או פעולה לוגית.

ניהול מערכים בתוך State ב-Class Component
כש-state מכיל אובייקט או מערך, אסור לשנות אותם במקומם גם אם זה נראה כאילו עובד. ההרצאה מראה את הדרך הנכונה: משכפלים, משנים את העותק ומחזירים אותו עם setState.
השלבים העיקריים
1. מבנה חדש: ה-state כבר לא מחזיק item ו-price ישירות אלא אובייקט product שמכיל אותם. האתחול והעדכון עובדים עם product שלם, וההצגה היא product.item ו-product.price.
2. כפתור נוסף: Increase Price בדולר, עם handler כ-arrow function.
3. הדרך הלא נכונה: לעשות this.state.product.price++. זו גישה ישירה ל-state, והמסך לא מתעדכן.
4. הדרך שנראית בסדר אך לא מומלצת: לשנות את האובייקט במקומו ואז להחזיר אותו ל-setState. זה אמנם עובד, אך React והמומחים לא ממליצים על כך. התוצאה עלולה להיות עדכון כפול, עשרה עדכונים, או חוסר עדכון.
5. הדרך הנכונה: יוצרים אובייקט חדש שמכיל עותק של הערכים, משנים אותו, ומחזירים אותו ל-state.
6. Spread operator: שלוש נקודות על this.state.product משכפלות את האובייקט, כך שלא צריך לשכפל כל שדה, גם אם יש בו עשרים.
7. קיצור בשם שדה: אם שם המשתנה זהה לשם השדה, כותבים אותו פעם אחת.
8. דריסה בתוך ה-spread: אפשר לכתוב spread ואז price עם הערך החדש, והוא דורס את הישן. המרצה מעדיף את הגרסה עם משתנה ביניים, כי היא ברורה יותר, אבל שתיהן חוקיות.
9. מערכים: אותו עיקרון. משכפלים עם spread בסוגריים מרובעים, משנים תא בעותק, ומחזירים אותו ל-setState. אסור לשנות this.state.arr[8] ישירות.
שימו לב
1. אובייקט משכפלים עם {...} ומערך עם [...].
2. שינוי ישיר של אובייקט במקום יכול להיראות תקין, אבל זו טכניקה שגויה.
אחרי ההרצאה אפשר לעדכן אובייקט או מערך ב-state בלי לפגוע בכללי React.
השיעור הבא בקורס: קליטת מידע מהמשתמש בריאקט React Two Way binding

פרקי ההרצאה: ניהול מערכים בתוך State ב-Class Component

  1. 00:00

    אובייקטים ומערכים בתוך State

  2. 01:38

    אובייקט product בתוך ה-State

  3. 02:15

    אתחול והצגת נתוני המוצר

  4. 04:01

    הוספת לחצן Increase Price

  5. 05:04

    הבעיה בשינוי ישיר של State

  6. 06:16

    עדכון המוצר דרך setState

תמלול ההרצאה: ניהול מערכים בתוך State ב-Class Component

הטקסט המלא של הדקות הראשונות בהרצאה «ניהול מערכים בתוך State ב-Class Component» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:40

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

  3. 01:28

    עליי זה לא צריך להיות זה צריך להיות בהערה יופי בוא נניח שבתוך הסטייט אין לי אייטם ופרייס יש לי אובייקט פרודקט ובתוך פרודקט אני רוצה שיהיה לי אייטם ופרייס.

  4. 01:53

    אייטם שהוא סטרינג ופרייס שהוא נאמבר. זה מה שאני רוצה שיהיה לי בתוך ה-State. נוריד רגע את שני החבר'ה האלה. הנה מצב שהוא קצת שונה ותכף אתם תבינו למה. יש לי אובייקט, תוך האובייקט יש לי אייטם ופרייס.

  5. 02:18

    אוקיי, בואו נטפל בזה. אז נתחיל רגע לשנות פה את מה שצריך. אז אני הולך פה ל-State ואני אומר, אוקיי, אני רוצה להתחיל אותו, אז מן הסתם אין לי אייטם ישירות ואין לי פרייס ישירות, יש לי פרודקט והפרודקט זה אובייקט ולאובייקט יש אייטם והוא בהתחלה מחוזת ריקה ויש לו פרייס

  6. 02:41

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

  7. 03:01

    מה שאתה צריך לעשות זה לתת לי product וה-product שאתה צריך לתת לי יש לו item ו-price בואו רגע נסגור אותו פה בצורה כזאת וכמובן כשאתה רוצה להציג את המידע אז אתה צריך לוודא שבאמת יש לך פה product.item כלשהו ואז אתה רוצה להציג את ה-product.item ואת ה-product.price וזה יעבוד כמו שצריך, בואו רגע נסתכל על זה

  8. 03:42

    ואני לוחץ עליו והנה אני רואה אייריש קופי ו-3.9 ואם אנחנו מסתכלים ב-F12 גם אנחנו לא מקבלים שוב שגיאה וזה בסדר גמור, ככה זה מעולה, עכשיו יש כאן איזושהי סיטואציה שאנחנו צריכים להיות מאוד מאוד ערים לה והסיטואציה היא כזאת, בואו נניח שאנחנו רוצים עוד לחצן, אני רגע אשכפל את הלחצן הזה,

  9. 04:21

    ואנחנו רוצים בלחצן השני Increase Price בדולר. מה הבעיה? בואו נעשה פה פונקציה פריווט Increase Handler, נגדיר אותה כמובן כ-Arrow, וניתן את הפונקציה Increase Handler ללחצן השני, ומה שהלחצן השני אמור לעשות זה פשוט להעלות את המחיר.

  10. 05:00

    טוב, מה בהעלות את המחיר? בואו ניגש ל-dis.state.product.price++ ונעלה את המחיר. זה חמור מאוד.

  11. 05:15

    מה שאני מראה כרגע זה לא עושים, בגלל שאנחנו ניגשנו ישירות ל-state. אנחנו לא רואים פה אפילו שגיאה, כי לא הכנסנו אליו ל-state product ערך, אלא נכנסנו למשהו שהוא בתוך הפרודקט ושינינו אותו.

  12. 05:35

    יכול להיות שהוא יציג לי את השינוי, יכול להיות שהוא לא יציג לי את השינוי. לפי דעתי הוא לא יציג, בואו נראה, רגע זה המצב הנוכחי. אני מעלה ואני גם לא רואה את השינוי בכלל.

  13. 05:49

    בואו ניכנס רגע ל-F12, הוא לא מזהיר אותי לגביו. לפעמים הוא נותן וורנינג, אולי בגלל שאני השתקתי את כל הוורנינגים. בואו נראה, אולי אני אחזיר וורנינג.

  14. 06:02

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

  15. 06:21

    אנחנו רוצים לעבור דרך ה-set state, ועדיין יש פה משהו שחשוב לציין, אני לא סתם עושה את הסרטון הזה, עדיין חשוב פה לציין משהו. ומה שחשוב פה לציין זה הדבר הבא, תראו, אתם רוצים שהמערכת כן תעדכן את השינוי החדש.

  16. 06:42

    אז מן הסתם ברור שמה שאתם רוצים לעשות זה dist.state.setate ולהכניס לו פרודקט חדש. ואז אתם יכולים להגיד, טוב, אחרי ששינית לי את המוצר, את המחיר של המוצר, אין לי את המוצר השונה וששונה לתוך ה-State.

  17. 07:16

    אוקיי, שימו לב מה בעצם אמרנו. שינית לי פה את המחיר של המוצר המקורי,

לקורס המלא: קורס ריאקט אונליין

ההרצאה הקודמת: ניהול State בתוך Class Component

ההרצאה הבאה: קליטת מידע מהמשתמש בריאקט React Two Way binding

הרצאות קשורות מקורסים אחרים

  • The R Class
  • ניהול OU
  • Component Testing
  • Component Communitaction

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס NodeJS