تكرار السؤال: …
الإجابة المختصرة
بدمج خاصية persist middleware في Zustand وتمرير محول تخزين مخصص (Custom Storage Engine) يوجه عمليات القراءة والكتابة إلى MMKV المتزامنة.
الشرح
يوفر هذا الدمج الحل الأمثل لحفظ واسترجاع حالة التطبيق تلقائياً (مثل تفضيلات الثيم، بيانات الجلسة، واللغة). نظراً لأن MMKV متزامنة، فإن استعادة الحالة تكون فورية وخالية من وميض الشاشة الافتراضية، مع إمكانية تحديد الحقول المراد حفظها فقط عبر partialize.
مثال بالكود
import { create } from 'zustand';
import { persist, createJSONStorage } from 'zustand/middleware';
import { MMKV } from 'react-native-mmkv';
const storage = new MMKV();
const mmkvStorage = {
setItem: (name: string, value: string) => storage.set(name, value),
getItem: (name: string) => storage.getString(name) ?? null,
removeItem: (name: string) => storage.delete(name),
};
export const useUserStore = create(
persist<{ name: string; setName: (n: string) => void }>(
(set) => ({
name: '',
setName: (name) => set({ name }),
}),
{
name: 'user-storage',
storage: createJSONStorage(() => mmkvStorage),
}
)
);أخطاء شائعة
- حفظ كائنات غير قابلة للتسلسل (كالـ functions أو circular objects) داخل الـ persistent store.
أسئلة متابعة
- كيف تتعامل مع تخزين وإدارة البيانات الكبيرة المؤقتة (Caching) باستخدام TanStack Query؟
- ما الفرق بين AsyncStorage ومكتبة react-native-mmkv ولماذا تعتبر MMKV أسرع بمراحل؟