PracticU

שליפת מידע עם Azios

בלי כתוביותעם כתוביות
PracticU › קורס ריאקט - React › שליפת מידע עם Azios
מילון מושגים:
Promise - אובייקט ב-JavaScript שמייצג תוצאה עתידית של פעולה אסינכרונית, שתושלם בהצלחה או תיכשל.
סטייט - המידע על מצבו הנוכחי של רכיב או אפליקציה בזמן נתון, שמשתנה ומשפיע על מה שמוצג.
הוק - נקודת חיבור שמאפשרת להריץ קוד מותאם בשלב מסוים של תהליך. ב-React, מנגנון לניהול מצב ויכולות ברכיבים.
POST - שיטת HTTP לשליחת נתונים לשרת כדי ליצור או לעדכן משאב, למשל שליחת טופס.
PUT - שיטת HTTP לשליחת נתונים לשרת כדי ליצור או להחליף משאב קיים במלואו.
Callback - פונקציה שמועברת כארגומנט לפונקציה אחרת כדי שתופעל מאוחר יותר, לרוב בסיום פעולה.
TypeScript - שפת תכנות המרחיבה את JavaScript בהוספת טיפוסים, ומתקמפלת ל-JavaScript רגיל.
קוד סטטוס - מספר שהשרת מחזיר בתגובת HTTP ומציין את תוצאת הבקשה, למשל 200 להצלחה או 404 לא נמצא.

שליפת מידע עם Azios
ההרצאה מראה איך גולשים לשרת מרוחק מתוך קומפוננט React, מקבלים את רשימת המוצרים ומציגים אותם. בדרך מוסברים promise, ‏then ו-catch, והחלופה עם async ו-await.
השלבים העיקריים
1. בחירת כלי לגלישה: ב-JavaScript אפשר להשתמש באובייקט XML HTTP Request או בפונקציה fetch, אבל כאן מתקינים ספרייה מוכנה עם npm i שמחזירה את המידע בפשטות ובפחות קוד, וה-package.json מציג את הגרסה שהותקנה.
2. state בקומפוננט: הקומפוננט ב-Product List הוא class component. הגלישה לוקחת זמן, ולכן הנתונים חייבים להיות ב-state כדי שהקומפוננט ירונדר מחדש כשהמידע מגיע. ה-state מכיל מערך products מסוג ProductModel[] ומתחיל ריק.
3. איפה מבצעים את הגלישה: לא ב-constructor ולא ב-render, כי גלישה היא side effect. מבצעים אותה ב-componentDidMount, ה-lifecycle hook שמיועד לפעולות כאלה פעם אחת כשהקומפוננט מוכן.
4. הפונקציות של הספרייה: מתאימות ל-REST API: get להבאת מידע, post להוספה, put לעדכון מלא, patch לעדכון חלקי ו-delete למחיקה. משתמשים ב-get ומציינים את הטיפוס (מערך של ProductModel) ואת ה-URL.
5. promise עם then ו-catch: הקריאה מחזירה promise. ב-then מעבירים callback שמקבל response, אובייקט מעטפת. המידע האמיתי נמצא ב-response.data, ומעדכנים איתו את ה-state באמצעות this.setState. ב-catch מטפלים בכישלון, למשל כשהשרת לא באוויר, ובשלב זה מציגים alert עם הודעת השגיאה.
6. הצגת המוצרים: עם interpolation, ‏this.state.products.map, ו-key שהוא p.id. בזכות הטיפוס מקבלים IntelliSense, ושם שדה שלא קיים בנתונים ייתן שגיאת קומפילציה.
7. חלופה עם async await: מוסיפים async לפני הפונקציה (היא כבר לא מחזירה void), ו-await לפני הקריאה. await ממתין לסיום ה-promise בלי לתקוע את הדפדפן, ומחזיר ישירות את ה-response. את הטיפול בשגיאה עושים ב-try ו-catch רגיל.
נקודות חשובות
- הטיפוס שמציינים ל-get חייב להתאים למה שהשרת מחזיר, אחרת TypeScript ידווח על חוסר התאמה.
- השרת המקומי חייב לרוץ.
- אפשר לדמות שגיאה על ידי גלישה לכתובת שלא קיימת. ההודעה שמוצגת היא request failed with status code 404, ואין בהכרח צורך להציג הודעה כזו למשתמש הסופי.
- ההרצאה מעדיפה async ו-await כי הם מונעים callback hell, אבל נשארת עם try ו-catch ומציינת שאין עדיין עיצוב.
אחרי ההרצאה אפשר לגלוש לשרת מרוחק, לקבל את הנתונים לתוך אובייקטי המודל ולהציג אותם.
השיעור הבא בקורס: יצירת מחלקה עם כל ההגדרות - Config Class - חלק 1

פרקי ההרצאה: שליפת מידע עם Azios

  1. 00:00

    כתיבת קוד לשליפת המידע

  2. 00:53

    התקנת ספריית Axios

  3. 01:49

    קומפוננטת Product List ו-state

  4. 03:21

    גלישה ב-componentDidMount

  5. 04:37

    פעולות get ו-post מול REST

  6. 05:57

    אובייקט Promise וקוד אסינכרוני

  7. 07:54

    הכנסת התגובה ל-state

תמלול ההרצאה: שליפת מידע עם Azios

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

  1. 00:02

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

  2. 00:15

    אז איך אנחנו מבצעים את הגלישה? אז כמובן יש ב-JavaScript תשתית שמאפשרת לבצע גלישת אג'אקס לשרת מרוחק. זה יכול להיות אובייקט מטיפוס XML HTTP Request.

  3. 00:30

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

  4. 00:57

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

  5. 01:31

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

  6. 01:42

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

  7. 02:02

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

  8. 02:24

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

  9. 02:41

    הסוג כמובן product model, סוגריים. הנה אנחנו רואים שקיבלנו מכאן את הלינק לפרודקט מודל שבנינו.

  10. 02:53

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

  11. 03:19

    והשאלה היא איפה אנחנו מבצעים את הגלישה ל-Backend. האם אנחנו מבצעים את הגלישה בקונסטרקטור? איך שהאובייקט של הקומפוננט נוצר? מתבצע קונסטרקטור?

  12. 03:32

    אנחנו יכולים בקונסטרקטור לבצע גלישה או ברנדר? אז התשובה היא כמובן לא בקונסטרקטור ולא ברנדר, מפני שגלישה ל-Backend נחשבת Side Effects, כלומר פעולות שהן מחוץ לגבולות הקומפוננט, ו-Side Effect שאנחנו רוצים לבצע פעם אחת ויחידה, כאשר הקומפוננט כבר מוכן לשימוש ומאפשר Side Effects,

  13. 03:57

    זה ב-Component Did Mount שלמדנו כאשר למדנו את ה-Lifecycle Hooks. Component did mount זה ה-life cycle hook שמיועד לביצוע side effects פעם אחת בלבד כשהקומפוננט מוכן לשימוש.

  14. 04:23

    כאן אנחנו רוצים לבצע את הגלישה לשרת המרוחק. אז אנחנו רוצים להשתמש ב-access, הנה היא מגיעה מפה, ו-access יש לה פונקציה שמאפשרת to get value, to post value, to put value.

  15. 04:50

    רגע, מה ההבדל בין כל אלה? אז ה-access מיועדת לגלישה ל-Rest API, RESTful Service. זה בעצם שרת שמחצין לנו מידע ומאפשר לנו להוסיף, לעדכן, למחוק, להביא מידע.

  16. 05:04

    אם אנחנו רוצים להביא, אז אנחנו צריכים להשתמש בפונקציית get. אם אנחנו רוצים להוסיף, זה פוסט, לעדכן זה put, לעדכן מידע מלא, לעדכן מידע חלקי זה patch, ולמחוק זה delete.

  17. 05:19

    אנחנו רוצים להביא את המידע, פונקציית get זו פונקציית ג'נרית שאומרת לנו מה סוג המידע שאתם הולכים להחזיר. אנחנו הולכים להחזיר product model מערך ואז היא אומרת לנו אוקיי תגידו מאיפה אתם רוצים להביא את המידע?

  18. 05:38

    הנה ה-url אנחנו רוצים להביא את ה-url בדיוק מאיפה שהוא מחצין את המידע. בואו נעתיק את ה-url הזה. go ונדבקנו וזהו. מה פונקציית אקשס מחזירה לנו?

  19. 05:57

    פונקציית אקשס מחזירה promise. promise זה בעצם אובייקט ב-JavaScript שמאפשר לנו להריץ בתוכו קוד א-סינכרוני ומאפשר לנו לקבל בחזרה את המידע לאחר שהקוד הא-סינכרוני הורץ.

  20. 06:23

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

  21. 06:43

    יש כמה שיטות להפעיל promise בואו נראה בעצם את שתי השיטות הנפוצות להפעיל promise. הפונקציה access מחזירה promise. promise יש לו פונקציה שנקראת then מאפשרת לקבל callback בכדי לומר לנו תשמעו סיימתי בהצלחה הנה המידע קחו את המידע אחרי שסיימתי תעשו איתו מה שאתם

  22. 07:08

    רוצים אז מה המידע ש-access מחזירה המידע שהיא מחזירה זה products מה אנחנו רוצים לעשות עם הproducts הנה יש לנו פה פונקציה שבה אנחנו יכולים לכתוב מה אנחנו רוצים לבצע כאשר הproducts יגיעו אלינו בגלל שפעילות אג'אקס היא פעילות אסינכרונית יכול להיות שהדבר הזה ייקח זמן, לכן המערכת אומרת לנו תנו לי callback, אני לא

  23. 07:39

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

  24. 07:53

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

  25. 08:04

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

  26. 08:24

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

  27. 08:36

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

  28. 08:54

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

  29. 09:15

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

  30. 09:35

    בואו נגיד לו שאני מחזיר מערך סטרינגים, הוא אומר לי לא, אתה לא יכול, כאן יש לך מערך מחרוזות זה מסוג product model collection, אתה לא יכול.

  31. 09:47

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

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

ההרצאה הקודמת: יצירת מחלקת מודל - Model Class

ההרצאה הבאה: יצירת מחלקה עם כל ההגדרות - Config Class - חלק 1

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

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

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

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