PracticU

רידקס - יצירת Reducer - ריאקט

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

רידקס - יצירת Reducer - ריאקט

בשיעור זה אנו בונים את ה-Reducer, הפונקציה המרכזית בתשתית Redux שמבצעת בפועל את כל הפעולות על ה-State, ולומדים תחילה כיצד Redux פועלת בפועל כדי לכתוב אותה נכון.
נושאי הסיכום המוצגים בשיעור:
1. מהו ה-Reducer: פונקציה שאנו בונים ושהיא זו שמבצעת בפועל כל פעולה שנשלחת על ה-State, כאשר כל אובייקט פעולה שנשלח מגיע אליה.
2. מי קורא לפונקציה: אנחנו לא קוראים ל-Reducer בשום מקום בתוכנית, אלא התשתית של Redux, ובפרט רכיב ה-Store, המוח של Redux שמנהל את כל הפעולות, הוא זה שקורא לה.
3. ה-State יושב בתוך ה-Store: אובייקט ה-AppState שבנינו, המכיל כרגע מערך מוצרים, נמצא בתוך ה-Store שמנהל אותו, ולא קיימים עדיין State של לקוחות, ספקים או עובדים.
4. שליחת פעולה ב-Dispatch: כאשר רוצים לבצע פעולה כמו הוספת מוצר, שולחים ל-Store אובייקט Action מתאים באמצעות פונקציית Dispatch, שמקבלת את האובייקט ומעבירה אותו אל ה-Store.
5. ה-Store מקשר בין ה-Action ל-Reducer: ה-Store לוקח את ה-State שיש לו ואת אובייקט ה-Action שהגיע, ומעביר את שניהם יחד אל פונקציית ה-Reducer.
6. חתימת הפונקציה: ה-Reducer מחויב לקבל שני ארגומנטים בדיוק, ה-State הנוכחי מסוג ה-State שהגדרנו וה-Action מסוג ה-Action שהגדרנו, ואין לנו חופש להמציא פרמטרים אחרים מכיוון שלא אנחנו קוראים לה.
7. תפקיד הפונקציה, להחזיר State חדש: ה-Reducer מקבל את ה-State הנוכחי, משנה אותו ומחזיר אובייקט State חדש שמכיל את השינוי, כלומר הפונקציה מקבלת State ומחזירה State.
8. השארת ההיסטוריה ב-Store: ה-Store אינו מוחק את ה-State הקודם אלא משאיר אותו ליד ה-State החדש, וכך נוצר מצעד של כל ה-State-ים לאורך הזמן, דבר שנראה כבזבוז זיכרון אך נועד לשמר את ההיסטוריה.
9. יתרונות שמירת ההיסטוריה: ההיסטוריה מאפשרת דיבאגינג בשם time travel debugging, מעבר אחורה בזמן ל-State ישן יותר, וגם אפשרות לבצע undo ולחזור ל-State קודם.
10. חוק השכפול: אנחנו לא מורשים לשנות את ה-State שקיבלנו ישירות, אלא לשכפל אותו, לשנות את השכפול ולהחזיר את השכפול כ-State החדש, ולכן הפרמטר ייקרא current state והתוצאה new state.
11. שכפול בעזרת Spread Operator: לשכפול האובייקט משתמשים באופרטור השכפול שלוש הנקודות על ה-State הנוכחי, ומדובר בשכפול רדוד ולא עמוק, וגם רדוד מספיק לצרכינו, ובסוף מחזירים את ה-State החדש ולא את הקודם.
12. ביצוע הפעולה לפי ה-Type: אובייקט ה-Action שנוצר על ידי Action Creator מכיל את סוג הפעולה שהוא מספר מזהה ואת הנתונים המשתתפים בפעולה, ולכן בתוך ה-Reducer בונים מבנה החלטה על בדיקת ה-Type שהגיע.
13. הוספת מוצר: עבור פעולת הוספת מוצר, ה-Load הוא המוצר להוספה, ולכן מוסיפים את אובייקט ה-Load אל מערך המוצרים שב-State החדש, ולא לשכוח לסיים כל ענף כראוי.
14. עדכון מוצר: עבור עדכון, ה-Load הוא המוצר לעדכון, מאתרים את האינדקס של המוצר לפי המזהה שלו בתוך מערך המוצרים באמצעות פונקציית איתור האינדקס, ומחליפים את המוצר במקום הזה במוצר החדש מה-Load.
15. מחיקת מוצר: עבור מחיקה, ה-Load הוא לא המוצר עצמו אלא המזהה שלו בלבד, מאתרים את האינדקס לפי המזהה, ומוחקים פריט אחד במקום הזה מהמערך באמצעות פונקציית המחיקה של מערכים, וחשוב להבין בכל פעולה מהו ה-Load ששולח אלינו.
16. הגדרת כל המוצרים: עבור הפעולה של הגדרת כל המוצרים, ה-Load הוא כבר מערך המוצרים המלא, ולכן אין צורך באיתור אינדקס, ופשוט מציבים את ה-Load כמערך המוצרים של ה-State החדש.
לסיכום, בשיעור זה למדנו כיצד Redux מנהלת את ה-State ומפעילה את ה-Reducer, הבנו את עיקרון השכפול שמשמר את ההיסטוריה ומאפשר ניפוי שגיאות בזמן, ובנינו בפועל את ה-Reducer לניהול מוצרים עם ארבעת הפעולות שהגדרנו, הוספה, עדכון, מחיקה והגדרת כל המוצרים, מה שהשלים את בניית קובץ ה-State של המוצרים. SR12656HE

פרקי ההרצאה: רידקס - יצירת Reducer - ריאקט

  1. 00:00

    תפקיד ה-Reducer ברידאקס

  2. 00:56

    מי קורא לפונקציית ה-Reducer

  3. 02:36

    שליחת Action דרך Dispatch

  4. 03:49

    הארגומנטים state ו-action

  5. 05:02

    שמירת היסטוריית ה-State

  6. 06:01

    שכפול ה-State והחזרת חדש

תמלול ההרצאה: רידקס - יצירת Reducer - ריאקט

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

  1. 00:02

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

  2. 00:25

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

  3. 00:39

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

  4. 01:01

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

  5. 01:26

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

  6. 01:37

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

  7. 01:44

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

  8. 01:59

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

  9. 02:15

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

  10. 02:25

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

  11. 02:54

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

  12. 03:09

    Dispatch מקבל את אותו Object, Object Action, אולי נצייר את זה כאן, אנחנו בעצם שולחים לה את אותו Action, Object, וזה מה שנתקבל לתוך ה-Store.

  13. 03:22

    עכשיו אנחנו צריכים שנייה אחת להבין מה Redux הולכת לעשות עם זה. מה אובייקט ה-Store שהוא התשתית של Redux הולך לעשות עם האקשן שהבאנו לו.

  14. 03:33

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

  15. 03:52

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

  16. 04:08

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

  17. 04:19

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

  18. 04:39

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

  19. 05:02

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

  20. 05:18

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

  21. 05:32

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

  22. 06:01

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

  23. 06:33

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

  24. 07:03

    בין לבין לשנות את ה-new state. אם אנחנו מסתכלים פה רק על השרטוט, מי שקורא לproducts reducer זה ה-store, לא אנחנו, אנחנו רק עושים dispatch לסטור, הסטור שולחת את זה ואת זה, אנחנו עושים את הפעולה על שכפול, מחזירים את השכפול, אז לסטור יש את כל ההיסטוריה של הסטייטים, אבל אם מישהו בא לסטור ואומר תביא לי בבקשה

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

ההרצאה הקודמת: רידקס - יצירת Action Creators - ריאקט

ההרצאה הבאה: רידקס - הפעלה ראשונה של AppState - ריאקט

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

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