Important
React-native-mmkv V3 est désormais un TurboModule C++ pur et nécessite l'activation de la nouvelle architecture . (réagir natif 0,75+)
StorageBenchmark compare les bibliothèques de stockage populaires les unes aux autres en lisant une valeur du stockage 1 000 fois :
MMKV vs autres bibliothèques de stockage : lecture d'une valeur du stockage 1 000 fois.
Mesuré en millisecondes sur un iPhone 11 Pro, plus bas est mieux.
yarn add react-native-mmkv
cd ios && pod install
npx expo install react-native-mmkv
npx expo prebuild
Pour créer une nouvelle instance du stockage MMKV, utilisez le constructeur MMKV
. Il est recommandé de réutiliser cette instance dans l'ensemble de votre application au lieu de créer une nouvelle instance à chaque fois, export
donc l'objet storage
.
import { MMKV } from 'react-native-mmkv'
export const storage = new MMKV ( )
Cela crée une nouvelle instance de stockage en utilisant l'ID de stockage MMKV par défaut ( mmkv.default
).
Si vous souhaitez partager des données MMKV entre votre application et d'autres applications ou extensions d'application du même groupe, ouvrez Info.plist
et créez une clé AppGroup
avec la valeur de votre groupe d'applications. MMKV stockera alors automatiquement les données dans le groupe d'applications qui pourront être lues et écrites à partir d'autres applications ou extensions d'applications du même groupe en utilisant le mode multi-traitement de MMKV. Voir Configuration des groupes d'applications.
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
} )
Cela crée une nouvelle instance de stockage à l'aide d'un ID de stockage MMKV personnalisé. En utilisant un ID de stockage personnalisé, votre stockage est séparé du stockage MMKV par défaut de votre application.
Les valeurs suivantes peuvent être configurées :
id
: ID de l'instance MMKV. Si vous souhaitez utiliser plusieurs instances, utilisez des ID différents. Par exemple, vous pouvez séparer le stockage de l'application globale et celui d'un utilisateur connecté. (obligatoire si les champs path
ou encryptionKey
sont spécifiés, sinon la valeur par défaut est : 'mmkv.default'
)path
: Le chemin racine de l’instance MMKV. Par défaut, MMKV stocke le fichier dans $(Documents)/mmkv/
. Vous pouvez personnaliser le répertoire racine de MMKV lors de l'initialisation de MMKV (documentation : iOS / Android)encryptionKey
: La clé de chiffrement/déchiffrement de l'instance MMKV. Par défaut, MMKV stocke toutes les valeurs-clés en texte brut dans un fichier, en s'appuyant sur le bac à sable iOS/Android pour garantir que le fichier est crypté. Si vous craignez une fuite d’informations, vous pouvez choisir de crypter MMKV. (documentation : iOS/Android)mode
: le comportement du processus du MMKV - lorsqu'elle est définie sur MULTI_PROCESS
, l'instance MMKV supposera que les données peuvent être modifiées de l'extérieur (par exemple, des clips d'application, des extensions ou des groupes d'applications).readOnly
: indique si cette instance MMKV doit être en mode lecture seule. Ceci est généralement plus efficace et évite les écritures indésirables sur les données si elles ne sont pas nécessaires. Tout appel à set(..)
sera lancé. 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 ( )
}
Une instance MMKV simulée est automatiquement utilisée lors des tests avec Jest ou Vitest, vous pourrez donc utiliser new MMKV()
comme d'habitude dans vos tests. Reportez-vous à package/example/test/MMKV.test.ts pour un exemple utilisant Jest.
Si un utilisateur choisit de désactiver LocalStorage dans son navigateur, la bibliothèque fournira automatiquement un stockage en mémoire limité comme alternative. Cependant, ce stockage en mémoire ne conservera pas les données et les utilisateurs risquent de perdre des données s'ils actualisent la page ou ferment leur navigateur. Pour optimiser l'expérience utilisateur, envisagez de mettre en œuvre une solution adaptée au sein de votre application pour répondre à ce scénario.
Utilisez flipper-plugin-react-native-mmkv pour déboguer votre stockage MMKV à l'aide de Flipper. Vous pouvez également simplement console.log
une instance MMKV.
Utilisez Reactotron-react-native-mmkv pour enregistrer automatiquement les écritures sur votre stockage MMKV à l'aide de Reactotron. Consultez la documentation pour savoir comment configurer ce plugin avec Reactotron.
Rejoignez le Margelo Community Discord pour discuter de React-native-mmkv ou d'autres bibliothèques Margelo.
React-native-mmkv est fourni tel quel , j'y travaille pendant mon temps libre.
Si vous intégrez React-native-mmkv dans une application de production, envisagez de financer ce projet et contactez-moi pour recevoir une assistance d'entreprise premium, de l'aide en cas de problèmes, prioriser les corrections de bogues, demander des fonctionnalités, de l'aide pour intégrer React-native-mmkv, et plus encore.
Consultez le guide de contribution pour savoir comment contribuer au référentiel et au workflow de développement.
MIT