مهم
React-native-mmkv V3 هو الآن C++ TurboModule خالص، ويتطلب تمكين البنية الجديدة . (رد الفعل الأصلي 0.75+)
يقوم StorageBenchmark بمقارنة مكتبات التخزين الشائعة ببعضها البعض من خلال قراءة قيمة من التخزين لمدة 1000 مرة:
MMKV مقابل مكتبات التخزين الأخرى : قراءة قيمة من التخزين 1000 مرة.
إذا تم قياسه بالمللي ثانية على iPhone 11 Pro، فالأقل هو الأفضل.
yarn add react-native-mmkv
cd ios && pod install
npx expo install react-native-mmkv
npx expo prebuild
لإنشاء مثيل جديد لتخزين MMKV، استخدم مُنشئ MMKV
. يوصى بإعادة استخدام هذا المثيل عبر تطبيقك بالكامل بدلاً من إنشاء مثيل جديد في كل مرة، لذا export
كائن storage
.
import { MMKV } from 'react-native-mmkv'
export const storage = new MMKV ( )
يؤدي هذا إلى إنشاء نسخة تخزين جديدة باستخدام معرف تخزين MMKV الافتراضي ( mmkv.default
).
إذا كنت ترغب في مشاركة بيانات MMKV بين تطبيقك والتطبيقات الأخرى أو ملحقات التطبيقات في نفس المجموعة، فافتح Info.plist
وأنشئ مفتاح AppGroup
بقيمة مجموعة تطبيقاتك. سيقوم MMKV بعد ذلك بتخزين البيانات تلقائيًا داخل مجموعة التطبيقات والتي يمكن قراءتها وكتابتها من تطبيقات أخرى أو ملحقات التطبيقات في نفس المجموعة من خلال الاستفادة من وضع المعالجة المتعددة لـ MMKV. راجع تكوين مجموعات التطبيقات.
import { MMKV , Mode } from 'react-native-mmkv'
export const storage = new MMKV ( {
id : `user- ${ userId } -storage` ,
path : ` ${ USER_DIRECTORY } /storage` ,
encryptionKey : 'hunter2' ,
mode : Mode . MULTI_PROCESS ,
readOnly : false
} )
يؤدي هذا إلى إنشاء مثيل تخزين جديد باستخدام معرف تخزين MMKV مخصص. باستخدام معرف تخزين مخصص، يتم فصل مساحة التخزين الخاصة بك عن مساحة تخزين MMKV الافتراضية لتطبيقك.
يمكن تكوين القيم التالية:
id
: معرف مثيل MMKV. إذا كنت تريد استخدام مثيلات متعددة، استخدم معرفات مختلفة. على سبيل المثال، يمكنك فصل مساحة تخزين التطبيق العام ومساحة تخزين المستخدم الذي قام بتسجيل الدخول. (مطلوب إذا تم تحديد path
أو حقول encryptionKey
، وإلا فإن القيمة الافتراضية هي: 'mmkv.default'
)path
: المسار الجذري لمثيل MMKV. افتراضيًا، يقوم MMKV بتخزين الملف داخل $(Documents)/mmkv/
. يمكنك تخصيص الدليل الجذر لـ MMKV عند تهيئة MMKV (الوثائق: iOS / Android)encryptionKey
: مفتاح التشفير/فك التشفير الخاص بمثيل MMKV. افتراضيًا، يقوم MMKV بتخزين جميع قيم المفاتيح بنص عادي في الملف، بالاعتماد على وضع الحماية الخاص بنظام التشغيل iOS/Android للتأكد من تشفير الملف. إذا كنت تقلق بشأن تسرب المعلومات، يمكنك اختيار تشفير MMKV. (الوثائق: iOS / أندرويد)mode
: سلوك عملية MMKV - عند التعيين على MULTI_PROCESS
، سيفترض مثيل MMKV إمكانية تغيير البيانات من الخارج (على سبيل المثال، مقاطع التطبيقات أو الإضافات أو مجموعات التطبيقات).readOnly
: ما إذا كان يجب أن يكون مثيل MMKV في وضع القراءة فقط. يعد هذا عادةً أكثر كفاءة ويتجنب عمليات الكتابة غير المرغوب فيها إلى البيانات إذا لم تكن هناك حاجة إليها. سيتم طرح أي استدعاء set(..)
. storage . set ( 'user.name' , 'Marc' )
storage . set ( 'user.age' , 21 )
storage . set ( 'is-mmkv-fast-asf' , true )
const username = storage . getString ( 'user.name' ) // 'Marc'
const age = storage . getNumber ( 'user.age' ) // 21
const isMmkvFastAsf = storage . getBoolean ( 'is-mmkv-fast-asf' ) // true
const [ username , setUsername ] = useMMKVString ( 'user.name' )
const [ age , setAge ] = useMMKVNumber ( 'user.age' )
const [ isMmkvFastAsf , setIsMmkvFastAf ] = useMMKVBoolean ( 'is-mmkv-fast-asf' )
// checking if a specific key exists
const hasUsername = storage . contains ( 'user.name' )
// getting all keys
const keys = storage . getAllKeys ( ) // ['user.name', 'user.age', 'is-mmkv-fast-asf']
// delete a specific key + value
storage . delete ( 'user.name' )
// delete all keys
storage . clearAll ( )
const user = {
username : 'Marc' ,
age : 21
}
// Serialize the object into a JSON string
storage . set ( 'user' , JSON . stringify ( user ) )
// Deserialize the JSON string into an object
const jsonUser = storage . getString ( 'user' ) // { 'username': 'Marc', 'age': 21 }
const userObject = JSON . parse ( jsonUser )
// encrypt all data with a private key
storage . recrypt ( 'hunter2' )
// remove encryption
storage . recrypt ( undefined )
const buffer = new ArrayBuffer ( 3 )
const dataWriter = new Uint8Array ( buffer )
dataWriter [ 0 ] = 1
dataWriter [ 1 ] = 100
dataWriter [ 2 ] = 255
storage . set ( 'someToken' , buffer )
const buffer = storage . getBuffer ( 'someToken' )
console . log ( buffer ) // [1, 100, 255]
// get size of MMKV storage in bytes
const size = storage . size
if ( size >= 4096 ) {
// clean unused keys and clear memory cache
storage . trim ( )
}
يتم استخدام مثيل MMKV المستهزئ تلقائيًا عند الاختبار باستخدام Jest أو Vitest، لذلك ستتمكن من استخدام new MMKV()
كالمعتاد في اختباراتك. ارجع إلى package/example/test/MMKV.test.ts للحصول على مثال باستخدام Jest.
إذا اختار المستخدم تعطيل LocalStorage في متصفحه، فستوفر المكتبة تلقائيًا مساحة تخزين محدودة في الذاكرة كبديل. ومع ذلك، لن يحتفظ هذا التخزين في الذاكرة بالبيانات، وقد يتعرض المستخدمون لفقدان البيانات إذا قاموا بتحديث الصفحة أو إغلاق المتصفح الخاص بهم. لتحسين تجربة المستخدم، فكر في تنفيذ حل مناسب داخل تطبيقك لمعالجة هذا السيناريو.
استخدم flipper-plugin-react-native-mmkv لتصحيح أخطاء تخزين MMKV باستخدام Flipper. يمكنك أيضًا ببساطة console.log
مثيل MMKV.
استخدم Reactotron-react-native-mmkv لتسجيل عمليات الكتابة تلقائيًا إلى مخزن MMKV الخاص بك باستخدام Reactotron. راجع المستندات لمعرفة كيفية إعداد هذا البرنامج الإضافي باستخدام Reactotron.
انضم إلى Margelo Community Discord للدردشة حول React-Native-mmkv أو مكتبات Margelo الأخرى.
يتم توفير React-Native-mmkv كما هو ، وأنا أعمل عليه في وقت فراغي.
إذا كنت تقوم بدمج React-Native-mmkv في تطبيق إنتاج، فكر في تمويل هذا المشروع واتصل بي للحصول على دعم مؤسسي متميز، والمساعدة في حل المشكلات، وتحديد أولويات إصلاحات الأخطاء، وطلب الميزات، والمساعدة في دمج React-Native-mmkv، والمزيد.
راجع دليل المساهمة لمعرفة كيفية المساهمة في المستودع وسير عمل التطوير.
معهد ماساتشوستس للتكنولوجيا