PracticU

הצגת פרטי מוצר

בלי כתוביותעם כתוביות
PracticU › קורס ריאקט - React › הצגת פרטי מוצר
מילון מושגים:
ראוט - הגדרה שמקשרת כתובת בקשה לקוד שמטפל בה באפליקציה. גם מסלול שדרכו עוברות חבילות ברשת.
סטייט - המידע על מצבו הנוכחי של רכיב או אפליקציה בזמן נתון, שמשתנה ומשפיע על מה שמוצג.
GET - שיטת HTTP לבקשת מידע מהשרת בלי לשנות אותו. הפרמטרים מועברים בדרך כלל בכתובת.
REST - סגנון לבניית ממשקי API מעל HTTP, המבוסס על משאבים ועל שיטות סטנדרטיות כמו GET ו-POST.
API - ממשק תכנותי שמגדיר כיצד תוכנה אחת פונה לאחרת ומחליפה איתה נתונים ופעולות.
אסינכרוני - אופן פעולה שבו פעולה ארוכה רצה ברקע והתוכנית ממשיכה בלי להמתין לה, ומטופלת כשתסתיים.
תגובה - המידע שהשרת מחזיר ללקוח בתשובה לבקשה, הכולל בדרך כלל נתונים וקוד סטטוס.
אופרטור - סימן בקוד שמבצע פעולה על ערכים, כמו חיבור, השוואה או פעולה לוגית.

הצגת פרטי מוצר
בהרצאה משלימים את דף פרטי המוצר: לחיצה על תמונה בכרטיסייה מעבירה לדף שמציג מוצר אחד בגדול, והנתונים שלו נשלפים מהשרת לפי ה-ID שבכתובת.
השלבים העיקריים
1. הראוט קיים: בנתב כבר מוגדר product/details/:id, והקומפוננט ProductDetails רק קרא את ה-ID בלי לעשות איתו משהו. גולשים ל-product/details/8 ורואים שהוא מגיע.
2. לינק על התמונה: עוטפים את התמונה ב-NavLink ולא בתגית a, כי a תגלוש לשרת ותביא את האתר מחדש ותפגע ב-single page application. הראוט מקומי ולכן בלי config.urls: product/details/ משורשר עם props.product.id.
3. state: מגדירים product מסוג ProductModel (אחד ויחיד), בהתחלה אובייקט זמני ("נעל") כי אין עדיין מוצר.
4. הבאת המוצר: ב-componentDidMount, בתוך try ו-catch (עם alert של ההודעה), עושים get לכתובת config.urls.products משורשר עם ה-ID. בשרתי REST API גלישה לכתובת עם /7 מחזירה רק את מוצר 7. הסלאש כבר בסוף הכתובת, ולכן אין לשרשר אחד נוסף. הפונקציה צריכה להיות async, ומעדכנים setState עם response.data.
5. תצוגה: כותרת h2, שם ב-h3, מחיר עם סימן דולר, מלאי ו-img שה-src שלו הוא config.urls.productImages ועוד imageName. את כל זה עוטפים ב-box.
6. קריסה בטעינה: כשמציגים עם state ריק התקבלה השגיאה cannot read property name of null. הסיבה: הרינדור הראשון קורה לפני componentDidMount, והנתונים עוד לא הגיעו מהשרת.
7. שני פתרונות: (א) האופרטור ?. (optional chaining) בכל גישה לשדה. (ב) conditional rendering אחד: מציגים הכול רק אם this.state.product מכיל ערך, בתוך קונטיינר אחד. במקרה השני אפשר להסיר את ה-?., והמרצה משאיר את הפתרון הזה.
8. עיצוב וחזרה: רוחב של 250 פיקסלים, ‏text-align: center, ‏padding-bottom: 20, ותמונה ברוחב באחוזים עם margin של 10. מוסיפים NavLink בשם back שחוזר ל-/products.
שימו לב
אומנם המוצר כבר נמצא ברשימה, אבל בקומפוננט הזה יש רק את ה-ID ולכן שולפים אותו שוב מהשרת. העברת מידע בין קומפוננטות ברמת האפליקציה מובטחת להמשך.
אחרי ההרצאה אפשר ללחוץ על תמונה של מוצר ולראות את כל פרטיו בדף נפרד.
השיעור הבא בקורס: הצגת רשימת העובדים

פרקי ההרצאה: הצגת פרטי מוצר

  1. 00:00

    הצגת פרטי מוצר בלחיצה

  2. 00:59

    הכרת ה-route של פרטי מוצר

  3. 02:15

    הפיכת התמונה ללינק

  4. 03:18

    ניווט בעזרת NavLink

  5. 04:36

    עיצוב קומפוננטת ה-details

  6. 05:53

    שליפת המוצר לפי ה-ID

  7. 07:40

    גלישת Axios למוצר בודד

  8. 08:27

    כתובת מוצר בודד ב-REST

תמלול ההרצאה: הצגת פרטי מוצר

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

  1. 00:02

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

  2. 00:25

    ואת התמונה ביותר גדול. עכשיו אם אתם זוכרים בנינו כבר דף כזה, בנינו כבר ראוט כזה בואו ניכנס רגע למנגנון הראוטינג הנה הוא פה ונראה שיש פה איזשהו ראוט שבנינו בעבר שנקרא product/details/ והוא מקבל ID זאת אומרת אם אנחנו גולשים לראוט הזה ונותנים לו איזשהו ID

  3. 00:52

    אנחנו רואים פה את הproduct details בואו נלך רגע לproduct details הוא נמצא בproducts area, product details וכל מה שעשינו בנושא הזה זה היה הצלחנו לשלוף את ה-ID שנשלח ב-route ולא עשינו איתו שום דבר מעבר לזה, רק כתוב פה product details ואולי הצגנו אותו על הקונסול או הצגנו אותו באלרט אבל לא עשינו שום דבר מעבר.

  4. 01:29

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

  5. 01:45

    אם אנחנו הולכים לפה ורושמים product/details/8 אז אנחנו רואים שהגענו ל-product/details. אוקיי, מעולה, עובד. בואו רגע נחזור.

  6. 02:00

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

  7. 02:26

    אז כל הדיו הזאת תהיה קליקאבל ותהיה בעצם לינק שניתן ללחוץ עליו אז אנחנו רוצים רק את התמונה כרגע אז אנחנו כעיקרון צריכים לעטוף אותה בתגית A אבל אמרנו אנחנו לא רוצים להשתמש עם תגיות a בreact כי אז האתר שלנו כבר לא יהיה single page application ברגע שנקליק על התמונה

  8. 02:46

    אז הוא יגלוש לשרת בשביל לקבל בחזרה את כל האתר עם התמונה אנחנו לא רוצים את זה אנחנו רק רוצים שהוא יחליף לנו את הראוט ויחליף לנו את הקומפוננטה בלי לגלוש בכלל לשרת בשביל להביא דף הכוונה כדי לפתור את הבעיה הזאת השתמשנו בעבר ב-nav-link.

  9. 03:11

    בואו נגדיר nav-link, נעטוף את התמונה. ה-nav-link צריך שיהיה לו 2, וכאן אנחנו צריכים לומר לו לאן אנחנו רוצים לגלוש. ה-route זה ראוט מקומי, זה לא ראוט בשרת, אז אני לא משתמש עם config.url.

  10. 03:33

    הראוט המקומי היה product.details.slash ופה אנחנו רוצים לשרשר לו את ה-ID של הכרטיסייה הזאת. זה יהיה props.product.id בואו נבדוק שזה עובד.

  11. 03:54

    נחזור בחזרה, שימו לב עכשיו שכשאני מרחף מעל תמונה אני הופך להיות יד, לוחץ והנה הגענו לפה, detail.slash 2 בואו נחזור, נלחץ על זה, go, כל מה שנשאר לנו לעשות זה לגשת לקומפוננטה של ה-details ולעצב אותה.

  12. 04:17

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

  13. 04:34

    בואו נוריד רגע את השלוש נקודות והוא לא יהיה mp הוא יהיה h2 אולי זה קצת יותר גדול, product details, בסדר. אולי נהפוך את כל זה ל-box, ואז כל הפרטים יהיו באיזו קופסה גדולה כזאת.

  14. 04:59

    אוקיי, אולי ניגש לפה ונתחיל להגדיר שאנחנו רוצים לראות את h3, כלומר, אנחנו רוצים להציג את הפרטים כ-h3, כלומר, כותרות יותר קטנות, ובואו נניח שזה יהיה נקודה state נקודה product נקודה name הנה ה-name שלו למה אין לי product פה ב-state אוי שאין לי product ב-state ובכלל לא הלכתי להביא את המוצר אוי אוי אוי

  15. 05:33

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

  16. 06:01

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

  17. 06:26

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

  18. 06:51

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

  19. 07:02

    אוקיי, אם יש לי את ה-ID, אני אלך לסרבר ויביא את המוצר הזה. נטפל בהמשך במצב של ייעול. אז בואו נעטוף את זה ב-Try Catch, כמו שעשינו מקודם ברשימת המוצרים.

  20. 07:18

    הנה Catch, נציג איזה Alert, איזה Error, בואו נציג את ה-Message, וניגש לפה, יש לנו את ה-ID. טוב, אם יש לי את ה-id אז אנחנו רוצים לבצע גלישת access בואו ניקח את ה-response await access הנה הוא get תביא לי פרטים של מוצר בודד product model אחד ויחיד

  21. 07:53

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

  22. 08:32

    המידע של אותו אובייקט בדיוק אז בואו נחזור ופשוט נשרשר אותו עם ה-ID ששנייה לפני זה הרצינו אותו. האם אנחנו צריכים לשרשר פה גם Slash?

  23. 08:48

    התשובה היא לא. למה? כי ה-Slash כבר נמצא פה, זוכרים את זה? זאת הסיבה ששמנו כאן Slash בסוף, כדי שלא נצטרך להתעסק עם אותו Slash בכל מקום שנרצה לשרשר עוד משהו.

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

ההרצאה הקודמת: עיצוב כרטיסיות

ההרצאה הבאה: הצגת רשימת העובדים

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

  • מבוא לענן פרטי עם OpenStack
  • התקנת Registry פרטי לאחסון Image
  • הצגת popover באייפון
  • הצגת תמונות באפליקציה

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

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