تكرار السؤال: …
الإجابة المختصرة
بحفظ الإجراءات في طابور محلي (Local Mutation Queue) عند انقطاع الشبكة، وإعادة إرسالها بالترتيب فور استعادة الاتصال مع معالجة تعارض التعديلات (Conflict Resolution).
الشرح
تعتمد تطبيقات Offline-first على مكتبات مثل TanStack Query أو WatermelonDB. يتم تخزين حالة التعديل محلياً أولاً مع تحديث الواجهة تفاؤلياً (Optimistic UI)، ويسجل الإجراء في طابور. عند استعادة الإنترنت عبر NetInfo، يتم تفريغ الطابور، مع الاعتماد على توقيتات التعديل (Timestamps) أو CRDTs لحل التعارض إذا كان السيرفر يحمل بيانات أحدث.
مثال بالكود
import NetInfo from '@react-native-community/netinfo';
// مراقبة عودة الاتصال وتفريغ طابور العمليات المعلقة
NetInfo.addEventListener(state => {
if (state.isConnected && pendingQueue.length > 0) {
flushPendingSyncQueue();
}
});أخطاء شائعة
- تجاهل سيناريو تعارض التعديل عندما يقوم مستخدمان بتعديل نفس السجل أثناء انقطاع الشبكة.
أسئلة متابعة
- متى نستخدم قاعدة بيانات SQLite محلية (مثل OP-SQLite أو WatermelonDB) بدلاً من Key-Value Storage؟
- كيف تراقب حالة اتصال الشبكة في React Native باستخدام @react-native-community/netinfo؟