PracticU

אירועים בתוך class component ב-React

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

אירועים בתוך class component ב-React
ב-class component פונקציית אירוע שמשתמשת ב-this עלולה להישבר, ובהרצאה מבינים למה ומה הפתרון. כדי להבין את הבעיה, המרצה מראה אותה קודם ב-JavaScript רגיל.
מעבר ל-class component
1. המבנה: מחלקה Recommended שיורשת מ-Component, עם render שמחזירה את אותו JSX.
2. הפונקציה ברמת המחלקה: פונקציית ה-handler לא נכתבת בתוך render, כי היא מורצת פעמים רבות ונבנית מחדש. היא יכולה להיות private. כדי לקרוא לה מ-render כותבים this.clickHandler. גם הפרמטר SyntheticEvent כמו קודם.
3. שדה במחלקה: private item עם הערך red wine. ניגשים אליו עם this.item.
4. הבעיה: בלחיצה מתקבלת שגיאה שאי אפשר לקרוא item של undefined. כלומר, this בתוך הפונקציה הוא undefined.
למה this נשבר ב-JavaScript
1. הדגמה: כפתור myButton עם addEventListener ל-click. בתוך ה-handler this הוא הכפתור. אבל אם צובעים את הרקע בתוך setTimeout אחרי שנייה, this.style קורס.
2. הסיבה: בג'אווה סקריפט this תלוי במי שקורא לפונקציה. את הפונקציה של setTimeout מפעיל האובייקט window, ולכן this שם הוא window, גם אם הפונקציה כתובה בתוך ה-handler של הכפתור.
שלושה פתרונות
1. משתנה עזר: שומרים את this במשתנה, למשל that, ומשתמשים בו. השם that נפוץ ושאלה שחוזרת בראיונות, ו-self לא מומלץ כי כבר קיים משתנה כזה.
2. bind: פונקציה היא אובייקט ואפשר לקרוא לו bind עם הערך ש-this יהיה בתוכה. זה אלגנטי יותר ממשתנה עזר. ב-React אפשר לעשות bind(this) על ה-handler, וזה עובד.
3. Arrow function: היא מקשרת אוטומטית את ה-this של הסקופ החיצוני אליה. זו הדרך הנפוצה והמועדפת, וההבדל מפונקציה רגילה אינו רק תחבירי.
הפתרון ב-React
מגדירים את ה-handler כמשתנה במחלקה שמקבל arrow function: clickHandler = (args: SyntheticEvent) => {...}. הסקופ החיצוני הוא המחלקה, ולכן this.item עובד והציג "Red Wine". מתעלמים מ-render, שמוגדרת כפונקציה רגילה כי היא דורסת את הפונקציה של Component.
אחרי ההרצאה אפשר לכתוב handler לאירוע ב-class component ולהבין למה הוא מוגדר כ-arrow function.
השיעור הבא בקורס: אירועים - העברת מידע בין קומפוננט ילד לאבא שלו - Child to Parent Event

פרקי ההרצאה: אירועים בתוך class component ב-React

  1. 00:00

    המרת Recommended ל-Class Component

  2. 01:22

    פונקציית האירוע ברמת הקלאס

  3. 02:37

    רישום הפונקציה עם this

  4. 03:37

    הצגת משתנה ברמת הקלאס

  5. 05:08

    השגיאה this is undefined

  6. 05:43

    הדגמת addEventListener ב-JavaScript

תמלול ההרצאה: אירועים בתוך class component ב-React

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

  1. 00:02

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

  2. 00:12

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

  3. 00:44

    נבנה לנו את ה-Render, ניקח את הקוד שהיה בתוך ה-Return, סליחה, כולל ה-Return, ונשים פה, נוריד אותו מההערה, נסדר את הקוד.

  4. 01:02

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

  5. 01:42

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

  6. 02:02

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

  7. 02:38

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

  8. 02:57

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

  9. 03:15

    נעשה הלרט ו-function works, נקרא לזה event works, אז אני רוצה רגע לרפרש, אני לוחץ עליו והוא כותב לי event works, והנה יש לנו יכולת להפעיל פונקציה על ידי event, כאשר אנחנו ב-class component ולא ב-function component, נכון פשוט?

  10. 03:43

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

  11. 03:57

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

  12. 04:09

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

  13. 04:31

    אייטם וניתן לו red wine ושימו לב שזה עבד לנו perfect go event works מעולה בוא תציג לי את אייטם אני לא יכול להציג את אייטם בצורה כזאת אם אני נמצא בתוך קלאס ואני רוצה להגיע למשתנים ברמת הקלאס, אז אני צריך this נקודה, הנה האייטם שלנו.

  14. 05:03

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

  15. 05:13

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

  16. 05:25

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

  17. 05:39

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

  18. 05:53

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

  19. 06:31

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

  20. 07:09

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

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

ההרצאה הקודמת: אירועים בריאקט - Events

ההרצאה הבאה: אירועים - העברת מידע בין קומפוננט ילד לאבא שלו - Child to Parent Event

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

  • The R Class
  • אירועים - Events - חלק 1
  • Component Testing
  • Component Communitaction

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

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