npm インストール反応ネイティブ mmkv ストレージ
エキスポプリビルド
このライブラリは、反応ネイティブ アプリでのデータ ストレージのニーズに高速かつ信頼性の高いソリューションを提供することを目的としています。 Android と iOS の両方で、Tencent の MMKV を内部で使用しており、WeChat アプリ (10 億人以上のユーザー) で使用されています。 React Native の他のストレージ ソリューションとは異なり、このライブラリを使用すると、非常に高速かつ効率的な方法で、暗号化の有無にかかわらず、あらゆる種類のデータを任意の数のデータベース インスタンスに保存できます。それについては、私が dev.to に書いたこのブログ投稿を読んでください。
JSI を使用して独自のモジュールを構築する方法については、私のブログをご覧ください。
React Native 0.71.0 以降でのみ動作します。古いバージョンの React Native を使用している場合は、0.8.x を使用し続けてください。
v0.5.0
以降、ライブラリは Android と iOS の両方で C++ で書き直されました。 React Native JSI を採用しているため、React Native の最速のストレージ オプションになります。
(Android は約 50K/iOS は約 30K)、パッケージ化するとさらに小さくなります。
MMKV は mmap を使用してメモリとファイルの同期を維持し、protobuf を使用して値をエンコード/デコードして最高のパフォーマンスを実現します。ここでベンチマークを確認できます: Android と iOS
useMMKVStorage
フックとuseIndex
フックを使用したリアクティブフックを使用すると、ストレージに変更が発生したときにストレージがアプリを更新できるようになります。
useMMKVStorage
フックv0.5.5
からは、JSI の力のおかげで、独自のuseMMKVStorage
フックができるようになりました。これは、ストレージ内のすべての変更を常に書き込み、アプリの UI を即座に更新する永続化された状態のようなものだと考えてください。アプリをリロードしても再起動しても問題ありません。
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 >
) ;
} ;
useMMKVStorage
フックの詳細については、ドキュメントを参照してください。
useIndex
フックキーの配列を取得し、それらのキーの値の配列を返すフック。これはトランザクションと組み合わせて機能するはずです。カスタム インデックスを構築したら、インデックスの値を簡単かつ迅速にロードする方法が必要になります。 useIndex フックは、すべての読み取り/書き込み変更をアクティブにリッスンし、それに応じて値を更新します。
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 >
}
useIndex
フックの詳細については、ドキュメントを参照してください。
値のライフサイクルを監視し、外出先でそれを変更します。トランザクションを使用すると、読み取り、書き込み、削除などのライフサイクル関数をストレージ インスタンスに登録できます。これにより、ストレージをより適切に管理できるようになり、数行のコードでカスタム インデックスを構築できるようになります。
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 ) ) ;
}
} ) ;
トランザクションの使用方法について詳しくは、ドキュメントをご覧ください。
MMKV は、プロセス間の同時読み取り/読み取りおよび読み取り/書き込みアクセスをサポートします。これは、さまざまな拡張機能、ウィジェット、アプリに MMKV を使用できることを意味します。
多数のデータベース インスタンスを作成できます。これは、同じアプリ内にデータを異なる方法で使用する個別のロジック/モジュールがある場合に非常に役立ちます。また、単一のかさばるデータベースではなく、各データベース インスタンスが小さいため、成長するにつれて処理が遅くなるため、パフォーマンスの向上にも役立ちます。
const userStorage = new MMKVLoader ( ) . withEncryption ( ) . withInstanceID ( 'userdata' ) . initialize ( ) ;
const settingsStorage = new MMKVLoader ( ) . withInstanceID ( 'settings' ) . initialize ( ) ;
このライブラリは、Android および iOS での完全な暗号化 (AES CFB-128) をサポートしています。継続的に使用できるように、暗号化キーを安全に保存することを選択できます。このライブラリは、iOS ではキーチェーンを使用し、Android では Android キーストアを使用します (API 23 以降)。インスタンスの暗号化は簡単です。
const storage = new MMKVLoader ( )
. withEncryption ( ) // Generates a random key and stores it securely in Keychain
. initialize ( ) ;
それで終わりです。
各データベース インスタンスには 1 つのグローバル キー インデックスがあり、さらに各タイプのデータのインデックスがあります。したがって、クエリは簡単かつ高速です。
Redux Persist のサポートも v0.3.2 から追加されます。
このライブラリは、expo ベア ワークフローで使用できます。
pnthach95 のおかげで、Flipper プラグインがついに登場しました。 https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage。ストレージ値のログ記録とその場での操作をサポートします。
プロジェクトのいずれかでライブラリを使用している場合は、スターを付けてサポートすることを検討してください。これを維持し、問題やバグに対処するには、多くの時間と労力がかかります。ありがとう。
素晴らしいニュースですね!この図書館では現在、非常に速いペースで多くのことが起こっています。あらゆる小さな助けは貴重です。さまざまな方法で貢献できます。
このライブラリは、MIT ライセンスに基づいてライセンスされています。
著作権 © アンマル・アーメッド (@ammarahm-ed)