وہ سوال جو آپ کے اسٹیٹ اسٹیک (State Stack) کا فیصلہ کرتا ہے
Redux کا React Query سے موازنہ کرنا بند کریں۔
یہ بالکل ایسا ہی ہے جیسے یہ پوچھنا کہ آپ کو ہتھوڑا چاہیے یا پیچ کس (screwdriver)، اس سے پہلے کہ آپ کو معلوم ہو کہ آپ کیا بنا رہے ہیں۔ Redux، React Query، اور Zustand سب مختلف مسائل حل کرتے ہیں۔
اصل فیصلہ ایک سوال سے ہوتا ہے: ہر اسٹیٹ (state) کے لیے 'سورس آف ٹروتھ' (source of truth) کا مالک کون ہے؟
آپ کے پاس حقیقت (truth) کی دو اقسام ہیں۔
1. ملکیتی حقیقت (Owned Truth) کلائنٹ ہی اس کا ذریعہ ہے۔ اس میں یہ چیزیں شامل ہیں:
- کیا سائیڈ بار کھلا ہے؟
- موجودہ تھیم کیا ہے؟
- فارم کا کون سا مرحلہ فعال ہے؟ یہ اسٹیٹ آپ کے مقامی فیصلوں پر منحصر ہے۔ اسے سرور کے ساتھ دوبارہ تصدیق کرنے کی ضرورت نہیں ہوتی۔
2. ادھار لی گئی حقیقت (Borrowed Truth) اس کا ذریعہ سرور پر ہوتا ہے۔ کلائنٹ صرف اس ڈیٹا کا عکس رکھتا ہے۔ یہ ڈیٹا آپ کی غیر موجودگی میں تبدیل ہوتا رہتا ہے۔ آپ کا کام ان چیزوں کو سنبھالنا ہے:
- Staleness (ڈیٹا کا پرانا ہونا)
- Invalidation (ڈیٹا کا باطل ہونا)
- Refetching (دوبارہ ڈیٹا حاصل کرنا)
- Caching (ڈیٹا کو محفوظ کرنا)
زیادہ تر ڈویلپرز اس لیے مشکل محسوس کرتے ہیں کیونکہ وہ دونوں کے لیے ایک ہی ٹول استعمال کرتے ہیں۔ جب آپ کلائنٹ سائیڈ ریڈیوسر (client-side reducer) میں ادھار لی گئی حقیقت کو سنبھالنے کی کوشش کرتے ہیں، تو آپ دراصل React Query کو ناقص طریقے سے دوبارہ لکھ رہے ہوتے ہیں۔ آپ خود سے لوڈنگ اسٹیٹس، ایرر ہینڈلنگ، اور کیشنگ لکھتے ہیں۔ اس سے غیر ضروری کوڈ کی ایک بڑی مقدار پیدا ہو جاتی ہے۔
جیتنے کے لیے انہیں الگ کریں۔
ادھار لی گئی حقیقت کے لیے React Query استعمال کریں۔ یہ ہم آہنگی (synchronization) کے مشکل کام کو سنبھالتا ہے۔ ملکیتی حقیقت کے لیے Zustand استعمال کریں۔ یہ بغیر کسی پیچیدگی کے سادہ ویلیو اسٹوریج کو سنبھالتا ہے۔
سرور ڈیٹا کو Zustand میں نہ ڈالیں۔ اس حد (boundary) کو واضح رکھیں۔
Redux اور Sagas کا کیا؟ Sagas ڈیٹا فیچنگ کے لیے نہیں ہیں۔ وہ وقت کے ساتھ پیچیدہ عمل کو ترتیب دینے (orchestrating) کے لیے ہیں۔ انہیں تب استعمال کریں اگر آپ کی ایپ ان چیزوں کو سنبھالتی ہے:
- بیک وقت چلنے والے (concurrent) اور منسوخ کیے جانے والے فلو (flows)۔
- ریئل ٹائم ویب ساکٹ اسٹریمز (websocket streams)۔
- پیچیدہ اسٹیٹ مشینز (state machines)۔
اگر آپ React Query استعمال کرتے ہیں اور آپ کے Sagas کچھ نہیں کر رہے، تو آپ کو ان کی ضرورت نہیں ہے۔
ایک تیسرا راستہ بھی ہے: وحدت (Unification)۔ RTK Query اور Redux آپ کو سب کچھ ایک ہی اسٹور میں رکھنے کی اجازت دیتے ہیں۔ یہ آپ کو اپنی پوری ایپ کا ایک واحد اسنیپ شاٹ فراہم کرتا ہے۔ اس سے ڈی بگنگ (debugging)، لاگ آؤٹ، اور آف لائن پرسسٹنس (offline persistence) بہت آسان ہو جاتی ہے۔
اپنی ضروریات کی بنیاد پر اپنا راستہ منتخب کریں:
- React Query + Zustand: کم پیچیدگی کی ضرورت رکھنے والی چھوٹی ٹیموں کے لیے بہترین۔
- Redux + Sagas: ہائی کنکرنسی (high-concurrency) والے شعبوں جیسے ٹریڈنگ ایپس کے لیے بہترین۔
- صرف RTK: ایک واحد سورس آف ٹروتھ کی ضرورت رکھنے والی بڑی انٹرپرائز ٹیموں کے لیے بہترین۔
کوئی ٹول منتخب کرنے سے پہلے، یہ پوچھیں کہ کیا اسٹیٹ کو کلائنٹ پر رہنے کی ضرورت بھی ہے؟ سرور کمپوننٹس (Server Components) اس لاجک کا ایک بڑا حصہ واپس سرور پر منتقل کر رہے ہیں۔
پہلے یہ معلوم کریں کہ حقیقت کا مالک کون ہے۔ ٹول خود بخود مل جائے گا۔