רידאקס (Redux) היא אחת החבילות הנפוצות בפאקט NPM והיא כמובן ספריית JavaScript בקוד פתוח.
Redux מספקת קונטיינר סטייט שתוכנן לעזור למפתחים לכתוב אפליקציות JavaScript עם סטייט, שמתנהגות בצורה אחידה בין קליינטים, שרתים וסביבות שהן גם קלות לבדיקה (כתיבת טסטים).
למרות שהכלי הזה נפוץ ביותר בשילוב עם React (ספריית NPM נפוצה לבניית אפליקציות ווב), ניתן להשתמש בו למעשה עם כל ספריית JavaScript אחרת. המשקל של הספרייה הוא רק 2KB , כולל ספריות תלויות, כך שניתן להשתמש בספרייה ללא דאגה להוספת “משקל עודף” לפרויקט.
עם יציאתה של Redux, נולד ויכוח חם בין המצדדים בשימוש בה, שהציגו כמובן את היתרונות, למתנגדים אשר מנו את הבעיות שעלולות להתעורר.
השימוש בספרייה אמנם נותן לנהל את המצב הנוכחי של האפליקציה שלכם בצורה אחידה לכל רוחבה, אך כפי שטוענים המתנגדים, כדי לאפשר זאת נדרש לכתוב לא מעט קוד נוסף שיש מי שיגיד שמפריע להבנת הקוד,
ובעצם מסבך פעולות פשוטות יתר על המידה.
בעינינו, כמו כל דבר, מדובר במידה רבה גם בארכיטקטורה שתבחרו לאפליקציה.
תשובה נפוצה לסוגיות אלו היא, כשתצטרך מערכת לניהול סטייט כמו רידאקס, כבר תדע לבד, ואם אינך בטוח, כנראה שאין לך צורך בה.
בדרך כלל הצורך בספרייה עולה כשאפליקציה מתחילה לעבוד ב-Scale, וניהול סטייט הופך להיות משימה מעיקה.
רידאקס (Redux) למעשה מנהלת את הסטייט בצורה פשוטה., ישנו המידע המרכזי ובו הכל מנוהל. הסטייט מורכב מכמה סוגים של אבני בניין: פעולות (actions), המידע (store), ומפחיתים (reducers).
פעולות, הן למעשה אירועים בעזרתם מרכיבי האפליקציה השונים (קומפמוננטות), יכולים לשנות את המידע השמות בסטייט. והן הדרך היחידה בה ניתן לשנות את המידע השמור בסטייט. הפעולות יכולות להיות מופעלות במגוון דרכים, כגון אינטראקציה עם הלקוח, קריאות API, או אפילו שליחת טופס.
המפחיתים, הם פונקציות טהורות שלוקחות את הסטייט הקיים, מבצעות עליו מניפולציה מסוימת, ובתמורה מחזירות את הסטייט החדש. הסטייט נשמר באובייקט שמגדיר לכל פעולה את השינוי הנדרש בסטייט. פונקציות הפחתה הן מושג נפוץ בJavascript , אלו פונקציות שמטרתן לחשב ערך בודד מהכנסת מספר ערכים שונים לאחר ביצוע פונקציית קולבק (פונקציה שרצה בתגובה לפעולה אחרת בצורה אסינכרונית בד”כ).
שכבת המידע למעשה היא המקום “הפיזי” בו נשמר המידע. הדעה הרווחת היא שמומלץ לייצר רק אחד כזה לכל אפליקציה. יכולת נוספת שמעניקה החבילה היא פונקציות Middleware.
אלו למעשה פונקציות שביכולתן לקלוט ולעבד את המידע לפני שמגיע למפחיתים ובכך ליעל תהליכים באפליקציה אף יותר.
לסיכום, הסיבה העיקרית לשימוש באפליקציה היא ביטול הצורך להזיז סטייט ברחבי האפליקציה, בעזרת רידאקס כל הקומפוננטות למעשה חולקות את הסטייט, וכך הופכות את הקוד שלכם ליעיל וקריא יותר. כל הפעולות ניתנות לניתור ומעקב, כך שכל פעולה נרשמת ועימה המידע הקריטי.
בנוסף, הסטייט הופך יותר צפוי ואמין לאורך כל האפליקציה, ישנה אמת אחת לפיה כל האפליקציה “יודעת” מה עליה לעשות. אין מקום לבאגים לא ברורים שאח”כ גם קשה למצוא ולטפל בהם, במיוחד כשמדובר בבסיס קוד לא קטן. עוד יתרון חשוב, נובע מהחיסרון (כביכול) שמציגים המתנגדים שהצגנו קודם.
הקוד הנוסף שהספריה “מכריחה” את המפתח ליישם מייצרת תשתית קלה לתחזוק ופיתוח, במיוחד ב-Scale. גם מטעמי ביצועים ניהול הסטייט במקום אחד אינו בעוכרה של הספרייה הזו היות וספריות כמו React Redux (הכלי הנפוץ לשילוב בין רידאקס לריאקט) דואגות לאופטימיזציות כבר מהקופסא, ולמעשה מרנדרות תמיד רק מה שצריך, ומתי שצריך.
כל היתרונות האלו הופכים את רידאקס לחלק אינטגרלי בתהליך כמו Server Side Rendering, או שמירת הסטייט בין ריענוני מסך. והיתרונות עוד רבים.
מחפש מתכנת Redux (רידקס)? פנה עכשיו וקבל הצעה אטרקטיבית!


