ngrx/store@ - זרימת נתונים
This video explains the fundamentals of data flow in @ngrx/store, illustrating the Redux pattern with practical examples and best practices.
ננסה לשמור על פשטות ולהתמקד בליבת @ngrx/store ובזרימת הנתונים הבסיסית באפליקציה של Angular עם NGRX.
מטרתנו בשיעור זה היא להבין 3 אלמנטים מרכזיים מ-@ngrx/store:
- Store
- Action
- Reducer
עם אלמנטים אלו ועם הרכיבים שלנו באנגולר, יש זרימת נתונים פשוטה שמתוארת בתרשים הבא:

הדיאגרמה אינה מתארת את הדיאגרמה המלאה של NGRX, חשוב לראות אותה כמנוע של הרכב, לדיאגרמה זו נוסיף בהדרגה חלקים נוספים עד שנבין את הרכב כולו, אבל כדאי להתחיל מגרסה פשוטה ולבנות את הדרך משם.
נבחן את הדיאגרמה ונתחיל עם ה-Store.
ה - Store הוא Service שמסופק על ידי @ngrx/store.
כאשר אנחנו מתקינים את @ngrx/store אנחנו יכולים להזריק את ה-Store כ - Service באמצעות DI של Angular.
npx ng add @ngrx/store@latestimport {Component} from '@angular/core'import {Store} from '@ngrx/store'
@Component({    selector: 'some-component',    ...})export class SomeComponent {    constructor(private store: Store) {}}בדוגמא זו ה- Component מבקש את ה- Store Service.
ישנו רק instance אחד של ה- Store בכל האפליקציה שלנו.
ה - Store מחזיק את ה - State של האפליקציה, והשימוש העיקרי ב- Store הוא:
- מזריקים את ה- Storeלקריאת ה -State
- מזריקים את ה- Storeכדי לשנות את ה -State
קריאת ה - State
Section titled “קריאת ה - State”Component של אנגולר שקורא את ה - State מיוצג בחלק זה של הדיאגרמה:

ניתן לקרוא את ה - State על ידי הזרקת ה - Store ושימוש בפעולת ה - select.
שימו לב שכאשר אתם משתמשים ב - store.select כדי לקרוא נתונים מה - State, אתם מקבלים Observable של הנתונים, ולכן עליכם להשתמש ב - async pipe ב -
שינוי ה - State
Section titled “שינוי ה - State”אחרי שהזרקנו את ה - Store וקראנו את ה - State, נוכל לשנות את ה - State על ידי שימוש ב - store.dispatch. החלק הזה של הזרימה קצת מורכב, אז נפרק אותו לפרטים.

שינוי יתחיל ממשהו שמפעיל את תהליך השינוי (בדוגמא של הדיאגרמה שלמעלה זה לחיצת כפתור).
דברים פופולריים שיפעילו את תהליך השינוי הם:
- פעולות משתמש (כמו לחיצת כפתור)
- בקשות או תגובות מהשרת
- אירועי טיימר
- אפקטים שמהווים שינוי שנובע משינוי אחר (על זה נדון בשיעור על אפקטים)
נשמור על פשטות בדוגמא זו ונשתמש בלחיצת כפתור כדי להפעיל את תהליך השינוי. תצפו בדוגמא הבאה שמגדילה מונה בכל לחיצת כפתור.
אנחנו משתמשים ב - this._store.dispatch({ type: 'INCREMENT' }) כדי לשלוח Action, יש שיעור מלא על Action בקישור כאן, אבל כרגע נראה על Action כ - Object פשוט שמתאר מה קרה עם זיהוי (במקרה שלנו הזיהוי הוא: type: 'INCREMENT') ונתונים אופציונליים payload אם האירוע צריך לשלוח מידע נוסף.

כאשר נרצה להתחיל שינוי ב - State, אנחנו מזריקים את ה - Store וקוראים ל - store.dispatch(action) ושולחים מידע על האירוע שקרה.
Reducer
Section titled “Reducer”ה- Reducer מקבל את ה - State הנוכחי ואת ה - Action שקרה ומחזיר את ה - State החדש. נסתכל על Reducer פשוט:
ה- Reducer הוא פונקציה שמקבלת את ה - State הנוכחי ואת ה - Action שקרה ומחזירה את ה - State החדש.

וזהו החלק האחרון בזרימת הנתונים של NGRX.
בשיעור זה למדנו על זרימת הנתונים ב-NGRX שמורכבת מהחלקים הבאים:
- Store- המחזיק את ה -- Stateשל האפליקציה
- Component יכול לקרוא את ה - Stateעל ידי הזרקת ה -Storeושימוש ב -store.select
- Component יכול לשנות את ה - Stateעל ידי שימוש ב -store.dispatch(Action)
- ה- store.dispatch(Action)מקבלActionשמתאר מה קרה.
- ה- Reducerמקבל את ה -Stateהנוכחי ואת ה -Actionשקרה ומחזיר את ה -Stateהחדש.
- ה- Storeמשנה את ה -Stateלפי ה -Stateהחדש שהוחזר על ידי ה -Reducer
- ה - Component יקבל את ה - Stateהחדש וירנדר את ה- template עם המידע החדש.