הסבר על Reducers
Reducers הם פונקציות טהורות (pure functions) שמקבלות את הנתונים הנוכחיים (state) ואת הפעולה שאנחנו רוצים לבצע (action), ומחזירות גרסה חדשה של הנתונים בהתאם ללוגיקה שביצענו.
המטרה של reducer היא לעדכן את הנתונים בלי לשנות את האובייקט המקורי, אלא להחזיר אובייקט חדש בזיכרון עם הערכים החדשים. כלומר, לא מבצעים שינוי ישיר על מה שכבר קיים, אלא יוצרים עותק חדש (אובייקט חדש) שמכיל את העדכון - וזה נקרא immutability ו-Redux Toolkit משתמשת ספרייה בשם Immer מאחורי הקלעים שדואגת לשמור על עקרון ה-immutability - על ידי כך שהיא יוצרת אובייקט חדש בזיכרון.
לדוגמה, אם נרצה להוסיף 1 לערך כלשהו, הפונקציה לא תעדכן את המספר עצמו - אלא תחזיר אובייקט חדש שבו המספר גדל ב-1.
ככה זה נראה בלי Immer (Redux רגיל):
return { ...state, value: state.value + 1 };
וככה זה נראה עם Immer (Redux Toolkit):
state.value++;
אבל מה קורה לאובייקט הישן?
אבל מה קורה לאובייקט הישן? אז האובייקט הישן, נשאר בזיכרון כל עוד מישהו עדיין משתמש בו (למשל קומפוננטה שעדיין מציגה אותו). ברגע שאין בו צורך - מנגנון ה-Garbage Collector של JavaScript יזהה זאת וימחק אותו אוטומטית מהזיכרון.