یک بار برای همیشه، redux یا zustand
در این پست به مقایسه redux toolkit و zustand میپردازم. ابتدا توضیح هر کدوم رو میدم و ساختارها رو میگم سپس تفاوت ها و شباهت ها رو میگم. خوبی ها و بدی های هر دو رو میگم. تجربه خودم رو هم میگم.
توضیح redux toolkit و ساختارش:
از پترن slice استفاده میکنه. برای هر بخشی میتوانیم یک slice داشته باشیم. یک slice از استیت و یک سری توابع تشکیل میشه که بوسیله تابع ها، مقدار استیت اش رو تغییر میدیم. برای فراخوانی توابع باید اونا رو dispatch کنیم. هر جا هم که مقدار یک استیت رو خواستیم با selector میایم مقدارش رو میخونیم که از نظر reRender هم بهینه است.
کلا یک provider و store داره. (میتونه چند تا store و provider داشته باشه که توصیه نمیشه).
توضیح zustand و ساختارش:
از پترن خاصی استفاده نمیکند و دست ما کاملا باز است. به سادگی میتوانیم برای هر بخش یک store ایجاد کنیم و از آن استفاده کنیم. در یک store ما هم کلید هایی داریم که داخلش مقادیر رو نگه میداریم و هم توابع رو تعریف میکنیم و همه یک جا هستند (مثل کلید های یک ابجکت). با استفاده از توابع میتوانیم مقادیر استیت رو اپدیت کنیم و نیازی به dispatch کردن نداریم بلکه تنها آن تابع را صدا میزنیم و برای گرفتن مقدار یک استیت از selector استفاده میکنیم که از نظر reRender هم بهینه است.
از ساختار provider استفاده نمیکند و میتوانیم به راحتی چندین store برای هر بخش از برنامه خودمان داشته باشیم.
برای ssr هر کدام چگونه هستند؟
در کتابخانه redux toolkit هنگامی که داریم یک store را ایجاد میکنیم باید توی تابع createStore یک ابجکتی از مقادیر اولیه را بدهیم و اینگونه برای ssr مقدار دهی میشود.
در کتابخانه zustand باید یک provider و context ایجاد کرد و store زوشتند را در کل برنامه به اشتراک گذاشت تا بقیه کامپوننت ها بتوانند به آن دسترسی داشته باشند. حالا در لحظه ای که داره اون کانتکست ایجاد میشه و به اشتراک گذاشته میشه باید store رو با مقادیر اولیه بسازیم و تو کل برنامه به اشتراک بزاریم. (یه جورایی یک store ایجاد میکنیم برای استیت ها و توابع ای که توی ssr نیازش داریم)
خوبی های redux toolkit:
دارای ساختار قوی و نظام مند
استفاده خودکار از immer
عدم نیاز به کانفیگ خاص و نوشتن کد اضافه برای هندل کردن ssr
خوبی های zustand:
در تمام فایل ها میتوان از استیت و توابع استفاده کرد و آنها را صدا زد. (چون برخلاف redux از provider استفاده نمیکند)
قابلیت multiple store. میتوان برای هر بخش که بخواهیم یک store جداگانه ایجاد کنیم.
حجم بسیار پایین gzipped: کمتر از 1 کیلوبایت
سادگی بسیار زیاد و عدم نوشتن کدهای تکراری و رعایت ساختار (حجم کد کمتر => حجم باندل کمتر)
بدی های redux toolkit:
به store در فایل هایی دسترسی داریم که درون provider و به عنوان فرزندی از آن باشند و در خارج از provider به آن دسترسی نداریم. (بر خلاف zustand)
حجم زیادتر gzipped نسبت به zustand: حدود 15 کیلوبایت
تکرار کردن ساختار و نوشتن کدهای تکراری و import های useDispatch و رعایت پترن slice در نتیجه حجم کد بیشتر => حجم باندل بیشتر
بدی های zustand:
عدم ساختار و احتمال کثیفی کد هنگامی که کدها زیاد و زیادتر میشوند.
نیاز به هندل کردن ssr به صورت دستی و نوشتن provider برای آن.
@DevTwitter | <Mohammad Reza G./>