Wichtig
React-native-mmkv V3 ist jetzt ein reines C++-TurboModul und erfordert die Aktivierung der neuen Architektur . (react-native 0,75+)
StorageBenchmark vergleicht gängige Speicherbibliotheken miteinander, indem es 1000 Mal einen Wert aus dem Speicher liest:
MMKV im Vergleich zu anderen Speicherbibliotheken : 1000 Mal einen Wert aus dem Speicher lesen.
Gemessen in Millisekunden auf einem iPhone 11 Pro: Je niedriger, desto besser.
yarn add react-native-mmkv
cd ios && pod install
npx expo install react-native-mmkv
npx expo prebuild
Um eine neue Instanz des MMKV-Speichers zu erstellen, verwenden Sie den MMKV
Konstruktor. Es wird empfohlen, diese Instanz in Ihrer gesamten App wiederzuverwenden, anstatt jedes Mal eine neue Instanz zu erstellen. export
daher das storage
.
import { MMKV } from 'react-native-mmkv'
export const storage = new MMKV ( )
Dadurch wird eine neue Speicherinstanz mit der Standard-MMKV-Speicher-ID ( mmkv.default
) erstellt.
Wenn Sie MMKV-Daten zwischen Ihrer App und anderen Apps oder App-Erweiterungen in derselben Gruppe teilen möchten, öffnen Sie Info.plist
und erstellen Sie einen AppGroup
Schlüssel mit dem Wert Ihrer App-Gruppe. MMKV speichert dann automatisch Daten innerhalb der App-Gruppe, die von anderen Apps oder App-Erweiterungen in derselben Gruppe gelesen und beschrieben werden können, indem der Multiverarbeitungsmodus von MMKV genutzt wird. Siehe Konfigurieren von App-Gruppen.
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
} )
Dadurch wird eine neue Speicherinstanz mit einer benutzerdefinierten MMKV-Speicher-ID erstellt. Durch die Verwendung einer benutzerdefinierten Speicher-ID wird Ihr Speicher vom Standard-MMKV-Speicher Ihrer App getrennt.
Folgende Werte können konfiguriert werden:
id
: Die ID der MMKV-Instanz. Wenn Sie mehrere Instanzen verwenden möchten, verwenden Sie unterschiedliche IDs. Sie können beispielsweise den Speicher der globalen App und den Speicher eines angemeldeten Benutzers trennen. (erforderlich, wenn path
oder encryptionKey
Felder angegeben sind, andernfalls ist der Standardwert: 'mmkv.default'
)path
: Der Stammpfad der MMKV-Instanz. Standardmäßig speichert MMKV die Datei in $(Documents)/mmkv/
. Sie können das Stammverzeichnis von MMKV bei der MMKV-Initialisierung anpassen (Dokumentation: iOS / Android).encryptionKey
: Der Verschlüsselungs-/Entschlüsselungsschlüssel der MMKV-Instanz. Standardmäßig speichert MMKV alle Schlüsselwerte im Klartext in der Datei und verlässt sich dabei auf die Sandbox von iOS/Android, um sicherzustellen, dass die Datei verschlüsselt ist. Sollten Sie befürchten, dass Informationen verloren gehen, können Sie MMKV verschlüsseln. (Dokumentation: iOS / Android)mode
: Das Prozessverhalten des MMKV – wenn es auf MULTI_PROCESS
eingestellt ist, geht die MMKV-Instanz davon aus, dass Daten von außen geändert werden können (z. B. App-Clips, Erweiterungen oder App-Gruppen).readOnly
: Ob sich diese MMKV-Instanz im schreibgeschützten Modus befinden soll. Dies ist in der Regel effizienter und vermeidet unerwünschte Schreibvorgänge in die Daten, wenn diese nicht benötigt werden. Jeder Aufruf von set(..)
wird ausgelöst. 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 ( )
}
Beim Testen mit Jest oder Vitest wird automatisch eine simulierte MMKV-Instanz verwendet, sodass Sie in Ihren Tests wie gewohnt new MMKV()
verwenden können. Ein Beispiel für die Verwendung von Jest finden Sie unter package/example/test/MMKV.test.ts.
Wenn ein Benutzer LocalStorage in seinem Browser deaktiviert, stellt die Bibliothek automatisch einen begrenzten In-Memory-Speicher als Alternative bereit. Dieser In-Memory-Speicher speichert jedoch keine Daten und es kann zu Datenverlusten kommen, wenn Benutzer die Seite aktualisieren oder ihren Browser schließen. Um die Benutzererfahrung zu optimieren, sollten Sie die Implementierung einer geeigneten Lösung in Ihrer App in Betracht ziehen, um dieses Szenario zu bewältigen.
Verwenden Sie flipper-plugin-react-native-mmkv, um Ihren MMKV-Speicher mit Flipper zu debuggen. Sie können eine MMKV-Instanz auch einfach console.log
.
Verwenden Sie „reactotron-react-native-mmkv“, um Schreibvorgänge in Ihren MMKV-Speicher mithilfe von Reactotron automatisch zu protokollieren. Informationen zur Einrichtung dieses Plugins mit Reactotron finden Sie in den Dokumenten.
Treten Sie dem Margelo Community Discord bei, um über „react-native-mmkv“ oder andere Margelo-Bibliotheken zu chatten.
„react-native-mmkv“ wird so bereitgestellt, wie es ist . Ich arbeite in meiner Freizeit daran.
Wenn Sie React-Native-MMKV in eine Produktionsanwendung integrieren, ziehen Sie die Finanzierung dieses Projekts in Betracht und kontaktieren Sie mich, um Premium-Enterprise-Support, Hilfe bei Problemen, Priorisierung von Bugfixes, Anforderungsfunktionen, Hilfe bei der Integration von React-Native-MMKV und mehr zu erhalten.
Sehen Sie sich den Beitragsleitfaden an, um zu erfahren, wie Sie zum Repository und zum Entwicklungsworkflow beitragen können.
MIT