PracticU

עדכון מוצר בריאקט

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

עדכון מוצר בריאקט
טופס עדכון דומה מאוד לטופס ההוספה, אבל הוא חייב להציג את הערכים הקיימים של המוצר. ההרצאה עוברת על קומפוננטה מוכנה לעדכון, מזהה מה חסר בה ומשלימה אותו.
מה יש בקומפוננטה
1. ראוט עם פרמטר: product/edit/:id, כי מעדכנים מוצר מסוים. הקישור מגיע מדף הפרטים של המוצר.
2. Functional component עם useForm: אותו useForm על ProductModel, ואותה בנייה של FormData ואותה תצוגה מקדימה של תמונה.
3. PUT במקום POST: העדכון נשלח עם put לכתובת המוצרים עם ה-id בסוף, לפי מוסכמת REST. אחרי העדכון מוצגת הודעה ומנווטים חזרה לרשימה בעזרת ה-props.
4. תמונה לא חובה: בטופס העדכון אין required על התמונה, כי התמונה נמצאת בשרת ולא במחשב המשתמש. אם לא נשלחת תמונה חדשה, נשארת הישנה.
מה חסר ואיך משלימים
5. הבעיה: הטופס נפתח ריק, אבל המשתמש רוצה אולי לעדכן רק את המחיר, וה-Backend לא יקבל מוצר בלי שם.
6. setValue: מוציאים מ-useForm גם את setValue, ומשתמשים בה לקביעת הערכים הראשוניים של השדות.
7. useEffect פעם אחת: מפעילים אותה ב-useEffect עם מערך תלויות ריק, כמו componentDidMount ב-class component.
8. הבאת המוצר: אין לקומפוננטה את אובייקט המוצר, רק את ה-id. לכן פונים ל-Backend עם axios.get<ProductModel> ומשרשרים את ה-id מ-props.match.params. כאן משתמשים ב-then וב-catch כי אי אפשר להגדיר את פונקציית ה-useEffect כ-async.
9. מילוי השדות: ב-then קוראים ל-setValue עבור name, price ו-stock, ומציגים את התמונה הקיימת בתצוגה המקדימה מכתובת התמונות של השרת ושם התמונה.
10. בדיקה: אחרי המילוי הופיעו הערכים הקודמים של התפוח, הולידציה עבדה, ועדכון ל-Green Apple עם מחיר 5.2 ומלאי 180 הופיע ברשימה.
שימו לב
- העברת מוצר בין קומפוננטות, כדי לא לפנות שוב לשרת, תוצג בהמשך.
- בהדגמה הודפס ה-id של המוצר, אבל באתרים אמיתיים לא מציגים ל-user מזהים ממסד הנתונים, וזה גם עניין של אבטחה.
אחרי ההרצאה אפשר לבנות טופס עדכון שמציג את הערכים הקיימים ושולח אותם עם PUT.
השיעור הבא בקורס: מחיקת מוצר בריאקט

פרקי ההרצאה: עדכון מוצר בריאקט

  1. 00:00

    מעבר על קוד טופס העדכון

  2. 01:53

    שליחת עדכון עם PUT

  3. 03:04

    ולידציות והתמונה בעדכון

  4. 04:00

    הבעיה: השדות ריקים בעדכון

  5. 05:45

    מילוי ערכים קודמים עם setValue

  6. 06:24

    שימוש ב-useEffect לפעם אחת

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

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

  1. 00:02

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

  2. 00:14

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

  3. 00:30

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

  4. 00:40

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

  5. 01:05

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

  6. 01:17

    הלינק של אדיט מפנה אותנו לproduct/edit/ ואז שולח את הקוד. עד כאן בסדר. כאשר אנחנו מגיעים לקומפוננטה הזאת, אז כאן מה שיש זה קודם כל קבלה של ה-route parameter, פה למעלה, ואנחנו רואים שזה משולב עם ה-properties.

  7. 01:36

    יש לנו את ה-functional component, למה זה functional? מפני שיש לנו פה טופס, וטופס אנחנו רוצים לעבוד עם use form שזה React hook.

  8. 01:47

    אז הנה בדיוק ה-use form הקודם שיודע לטפל בפרודקט מודל, והנה ה-submit שכל מה שהוא עושה זה לוקח את הפרטים מהטופס, הופך אותו ל-form data כמו שלמדנו, ואז אנחנו שולחים את זה לשרת על ידי put ולא על ידי post.

  9. 02:09

    זה דבר מאוד חשוב. אם אנחנו שולחים את כל הפרטים לעדכון, אז זה כמובן put request. אנחנו גולשים לאותה כתובת של המוצרים ומשרשרים לכתובת את הקוד, ואז ככה השרת יודע איזה מוצר אנחנו רוצים לעדכן. זו בעצם מוסכמה של REST API. הנה ה-form data.

  10. 02:29

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

  11. 02:42

    אז כאן אנחנו לא צריכים להתעסק עם ה-react hook use history כמו שהיה לנו בטופס ההוספה, כי זה מופיע פה ופותר לנו את הבעיה. זה בעצם ה-submit, אם אנחנו יורדים פה למטה אנחנו רואים את כל הקוד של העדכון preview של התמונה, ממש same כמו שהיה לנו.

  12. 03:00

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

  13. 03:26

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

  14. 03:42

    לכן זה לא דבר נכון לעשות must, כלומר שדה חובה על תמונה כאשר אנחנו עושים update. כי אם אנחנו לא נשלח, אז מקסימום יש את התמונה הקודמת.

  15. 03:51

    זה בעצם הקונספט. יש לנו פה את ה-preview, יש לנו את הלחצן update, ויש לנו ללחצן Cancel. זה בעצם הקוד.

  16. 04:01

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

  17. 04:27

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

  18. 04:36

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

  19. 05:00

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

  20. 05:14

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

  21. 05:35

    בלי name גם עבור העדכון. אז כל מה שאנחנו רוצים לעשות זה רק עבור עדכון אנחנו רוצים להגדיר את השדות הקודמים את ה-Values הקודמים איך עושים את זה. מה שקורה זה ש-Use Form מספקת לנו את האפשרות הזאת.

  22. 05:53

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

  23. 06:09

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

  24. 06:19

    קודם כל, כמה פעמים אני רוצה לעדכן ערכים כאלה? אני רוצה לעדכן משהו פעם אחת. אם אני נמצא ב-functional component ואני רוצה לעדכן משהו פעם אחת, אני צריך להשתמש ב-use effect.

  25. 06:32

    אם הייתי ב-class component והייתי רוצה לעדכן משהו פעם אחת, הייתי משתמש ב-component add mount. אז בואו נשתמש כרגע ב-use effect, אנחנו ב-functional component.

  26. 06:44

    יש לנו כאן פונקציה ואנחנו רוצים להפעיל

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

ההרצאה הקודמת: הצגת הודעות שגיאה למשתמש בריאקט - Validation Messages

ההרצאה הבאה: מחיקת מוצר בריאקט

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

  • עדכון מוצר - קורס NodeJS
  • עדכון של Kali
  • עדכון נתונים ב-MongoDB
  • CLR - פונקצית עדכון

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

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