npm installiere React-Native-MMKV-Storage
Expo-Vorbau
Ziel dieser Bibliothek ist es, eine schnelle und zuverlässige Lösung für Ihre Datenspeicheranforderungen in reaktiven Apps bereitzustellen. Unter der Haube wird MMKV von Tencent auf Android und iOS verwendet, das auch von der WeChat-App (mehr als 1 Milliarde Benutzer) verwendet wird. Im Gegensatz zu anderen Speicherlösungen für React Native können Sie mit dieser Bibliothek jede Art von Datentyp in einer beliebigen Anzahl von Datenbankinstanzen mit oder ohne Verschlüsselung auf sehr schnelle und effiziente Weise speichern. Lesen Sie darüber in diesem Blogbeitrag, den ich auf dev.to geschrieben habe
Erfahren Sie in meinem Blog, wie Sie Ihr eigenes Modul mit JSI erstellen
Funktioniert nur mit React Native 0.71.0 und höher. Wenn Sie eine ältere Version von React Native verwenden, verwenden Sie weiterhin 0.8.x.
Ab v0.5.0
wurde die Bibliothek sowohl für Android als auch für iOS in C++ neu geschrieben. Es nutzt React Native JSI und ist damit die schnellste Speicheroption für React Native.
(~ 50.000 Android/30.000 iOS) und im Paket noch kleiner.
MMKV verwendet mmap, um den Speicher mit der Datei synchron zu halten, und protobuf, um Werte zu kodieren/dekodieren, um die beste Leistung zu erzielen. Die Benchmarks können Sie hier sehen: Android & iOS
useMMKVStorage
und useIndex
HooksMithilfe von Hooks kann der Speicher Ihre App aktualisieren, wenn eine Änderung im Speicher erfolgt.
useMMKVStorage
Ab v0.5.5
verfügen wir dank der Leistungsfähigkeit von JSI nun über unseren eigenen useMMKVStorage
Hook. Stellen Sie sich das wie einen dauerhaften Zustand vor, der immer jede Änderung im Speicher schreibt und die Benutzeroberfläche Ihrer App sofort aktualisiert. Es spielt keine Rolle, ob Sie die App neu laden oder neu starten.
import { MMKVLoader , useMMKVStorage } from 'react-native-mmkv-storage' ;
const storage = new MMKVLoader ( ) . initialize ( ) ;
const App = ( ) => {
const [ user , setUser ] = useMMKVStorage ( 'user' , storage , 'robert' ) ;
const [ age , setAge ] = useMMKVStorage ( 'age' , storage , 24 ) ;
return (
< View style = { styles . header } >
< Text style = { styles . headerText } >
I am { user } and I am { age } years old.
</ Text >
</ View >
) ;
} ;
Weitere Informationen zum useMMKVStorage
Hook finden Sie in den Dokumenten.
useIndex
HookEin Hook, der ein Array von Schlüsseln entgegennimmt und ein Array von Werten für diese Schlüssel zurückgibt. Dies soll in Kombination mit Transaktionen funktionieren. Wenn Sie Ihren benutzerdefinierten Index erstellt haben, benötigen Sie eine einfache und schnelle Möglichkeit, Werte für Ihren Index zu laden. Der useIndex-Hook lauscht aktiv auf alle Lese-/Schreibänderungen und aktualisiert die Werte entsprechend.
const App = ( ) => {
// Get list of all post ids
const postsIndex = useMMKVStorage ( "postsIndex" , storage , [ ] ) ; // ['post123','post234'];
// Get the posts based on those ids.
const [ posts , update , remove ] = useIndex ( postsIndex , "object" storage ) ;
return < View >
< FlatList
data = { posts }
renderItem = { ... }
>
</ View >
}
Weitere Informationen zum useIndex
Hook finden Sie in den Dokumenten.
Hören Sie sich den Lebenszyklus eines Werts an und verändern Sie ihn unterwegs. Mit Transaktionen können Sie Lebenszyklusfunktionen wie Lesen, Schreiben und Löschen bei Ihrer Speicherinstanz registrieren. Dies ermöglicht eine bessere und besser verwaltete Kontrolle über den Speicher und ermöglicht Ihnen auch die Erstellung benutzerdefinierter Indizes mit wenigen Codezeilen.
MMKV . transactions . register ( 'object' , 'beforewrite' , ( { key , value } ) => {
if ( key . startsWith ( 'post.' ) ) {
// Call this only when the key has the post prefix.
let indexForTag = MMKV . getArray ( ` ${ value . tag } -index` ) || [ ] ;
MMKV . setArray ( indexForTag . push ( key ) ) ;
}
} ) ;
Erfahren Sie mehr über die Verwendung von Transaktionen in Dokumenten
MMKV unterstützt den gleichzeitigen Lese-Lese- und Lese-Schreibzugriff zwischen Prozessen. Das bedeutet, dass Sie MMKV für verschiedene Erweiterungen und Widgets und Ihre App verwenden können.
Sie können viele Datenbankinstanzen erstellen. Dies ist sehr hilfreich, wenn Sie separate Logiken/Module in derselben App haben, die Daten unterschiedlich verwenden. Es trägt auch zu einer besseren Leistung bei, da jede Datenbankinstanz klein ist und nicht eine einzelne, umfangreiche Datenbank, die die Dinge langsamer macht, wenn sie wächst.
const userStorage = new MMKVLoader ( ) . withEncryption ( ) . withInstanceID ( 'userdata' ) . initialize ( ) ;
const settingsStorage = new MMKVLoader ( ) . withInstanceID ( 'settings' ) . initialize ( ) ;
Die Bibliothek unterstützt vollständige Verschlüsselung (AES CFB-128) auf Android und iOS. Sie können Ihren Verschlüsselungsschlüssel für die kontinuierliche Verwendung sicher speichern. Die Bibliothek verwendet den Schlüsselbund unter iOS und den Android Keystore unter Android (API 23 und höher). Das Verschlüsseln einer Instanz ist einfach:
const storage = new MMKVLoader ( )
. withEncryption ( ) // Generates a random key and stores it securely in Keychain
. initialize ( ) ;
Und das ist es.
Für jede Datenbankinstanz gibt es einen globalen Schlüsselindex und dann gibt es Indizes für jeden Datentyp. So ist die Abfrage einfach und schnell.
Unterstützung für Redux Persist wird ab Version 0.3.2 ebenfalls hinzugefügt.
Sie können diese Bibliothek mit dem Expo Bare-Workflow verwenden.
Dank pnthach95 ist das Flipper-Plugin endlich da. https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage. Es unterstützt die Protokollierung und Bearbeitung von Speicherwerten im laufenden Betrieb.
Wenn Sie die Bibliothek in einem Ihrer Projekte verwenden, sollten Sie über eine Unterstützung mit einem Stern nachdenken. Es erfordert viel Zeit und Mühe, dies aufrechtzuerhalten und Probleme und Fehler zu beheben. Danke schön.
Das sind großartige Neuigkeiten! In dieser Bibliothek passiert derzeit sehr viel und sehr schnell. Jede noch so kleine Hilfe ist wertvoll. Sie können auf viele Arten beitragen:
Diese Bibliothek ist unter der MIT-Lizenz lizenziert.
Urheberrecht © Ammar Ahmed (@ammarahm-ed)