npm installe réagir-native-mmkv-storage
pré-construction d'exposition
Cette bibliothèque vise à fournir une solution rapide et fiable pour vos besoins de stockage de données dans les applications réactives natives. Il utilise MMKV de Tencent sous le capot sur Android et iOS, tous deux utilisés par leur application WeChat (plus d'un milliard d'utilisateurs). Contrairement à d'autres solutions de stockage pour React Native, cette bibliothèque vous permet de stocker tout type de données, dans n'importe quel nombre d'instances de base de données, avec ou sans chiffrement, de manière très rapide et efficace. Lisez à ce sujet dans ce billet de blog que j'ai écrit sur dev.to
Apprenez à créer votre propre module avec JSI sur mon blog
Fonctionne uniquement avec React Native 0.71.0 et supérieur. Si vous utilisez une ancienne version de React Native, continuez à utiliser la version 0.8.x.
À partir de v0.5.0
la bibliothèque a été réécrite en C++ sur Android et iOS. Il utilise React Native JSI, ce qui en fait l'option de stockage la plus rapide pour React Native.
(~ 50 000 Android/30 000 iOS) et encore plus petit une fois emballé.
MMKV utilise mmap pour maintenir la mémoire synchronisée avec le fichier et protobuf pour encoder/décoder les valeurs afin d'obtenir les meilleures performances. Vous pouvez voir les benchmarks ici : Android et iOS
useMMKVStorage
et useIndex
Les hooks permettent au stockage de mettre à jour votre application lorsqu'une modification a lieu dans le stockage.
useMMKVStorage
de stockage À partir de v0.5.5
, grâce à la puissance de JSI, nous disposons désormais de notre propre useMMKVStorage
Hook. Considérez-le comme un état persistant qui écrira toujours chaque modification dans le stockage et mettra à jour l'interface utilisateur de votre application instantanément. Peu importe que vous rechargez l'application ou que vous la redémarriez.
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 >
) ;
} ;
Apprenez-en plus sur useMMKVStorage
et connectez-le dans la documentation.
useIndex
Un hook qui prendra un tableau de clés et retournera un tableau de valeurs pour ces clés. Ceci est censé fonctionner en combinaison avec les transactions. Une fois votre index personnalisé créé, vous aurez besoin d’un moyen simple et rapide de charger les valeurs de votre index. Le hook useIndex écoute activement toutes les modifications en lecture/écriture et met à jour les valeurs en conséquence.
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 >
}
Apprenez-en plus sur useIndex
et accrochez-le dans la documentation.
Écoutez le cycle de vie d'une valeur et faites-la muter à tout moment. Les transactions vous permettent d'enregistrer des fonctions de cycle de vie avec votre instance de stockage, telles que la lecture, l'écriture et la suppression. Cela permet un contrôle meilleur et plus géré sur le stockage et vous permet également de créer des index personnalisés avec quelques lignes de code.
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 ) ) ;
}
} ) ;
En savoir plus sur l'utilisation des transactions dans Docs
MMKV prend en charge l'accès simultané en lecture-lecture et en lecture-écriture entre les processus. Cela signifie que vous pouvez utiliser MMKV pour diverses extensions et widgets ainsi que pour votre application.
Vous pouvez créer de nombreuses instances de base de données. Cela aide grandement si vous avez des logiques/modules distincts dans la même application qui utilisent les données différemment. Cela contribue également à de meilleures performances puisque chaque instance de base de données est petite au lieu d'une seule base de données volumineuse, ce qui ralentit les choses à mesure qu'elle se développe.
const userStorage = new MMKVLoader ( ) . withEncryption ( ) . withInstanceID ( 'userdata' ) . initialize ( ) ;
const settingsStorage = new MMKVLoader ( ) . withInstanceID ( 'settings' ) . initialize ( ) ;
La bibliothèque prend en charge le cryptage complet (AES CFB-128) sur Android et iOS. Vous pouvez choisir de stocker votre clé de cryptage en toute sécurité pour une utilisation continue. La bibliothèque utilise Keychain sur iOS et Android Keystore sur Android (API 23 et supérieur). Chiffrer une instance est simple :
const storage = new MMKVLoader ( )
. withEncryption ( ) // Generates a random key and stores it securely in Keychain
. initialize ( ) ;
Et c'est tout.
Pour chaque instance de base de données, il existe un index de clé global, puis des index de chaque type de données. L’interrogation est donc simple et rapide.
La prise en charge de redux persist est également ajoutée à partir de la v0.3.2.
Vous pouvez utiliser cette bibliothèque avec le workflow Expo Bare.
Grâce à pnthach95, le plugin Flipper est enfin là. https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage. Il prend en charge la journalisation et la manipulation des valeurs de stockage à la volée.
Si vous utilisez la bibliothèque dans l'un de vos projets, pensez à la soutenir avec une étoile. Il faut beaucoup de temps et d'efforts pour maintenir cela à jour et résoudre les problèmes et les bugs. Merci.
C'est une super nouvelle ! Il se passe beaucoup de choses à un rythme très rapide dans cette bibliothèque en ce moment. Chaque petite aide est précieuse. Vous pouvez contribuer de plusieurs manières :
Cette bibliothèque est sous licence MIT.
Droits d'auteur © Ammar Ahmed (@ammarahm-ed)