重要
現在、react-native-mmkv V3 は純粋な C++ TurboModule になっており、新しいアーキテクチャを有効にする必要があります。 (リアクトネイティブ 0.75+)
StorageBenchmark は、ストレージから値を 1000 回読み取ることで、一般的なストレージ ライブラリを相互に比較します。
MMKV と他のストレージ ライブラリの比較: ストレージから値を 1000 回読み取ります。
iPhone 11 Pro ではミリ秒単位で測定され、低いほど優れています。
yarn add react-native-mmkv
cd ios && pod install
npx expo install react-native-mmkv
npx expo prebuild
MMKV ストレージの新しいインスタンスを作成するには、 MMKV
コンストラクターを使用します。毎回新しいインスタンスを作成するのではなく、アプリ全体でこのインスタンスを再利用することをお勧めします。そのため、 storage
オブジェクトexport
。
import { MMKV } from 'react-native-mmkv'
export const storage = new MMKV ( )
これにより、デフォルトの MMKV ストレージ ID ( mmkv.default
) を使用して新しいストレージ インスタンスが作成されます。
アプリと、同じグループ内の他のアプリまたはアプリ拡張機能との間で MMKV データを共有する場合は、 Info.plist
開いて、アプリ グループの値を使用してAppGroup
キーを作成します。 MMKV は、MMKV のマルチ処理モードを利用して、同じグループ内の他のアプリまたはアプリ拡張機能から読み書きできるデータをアプリ グループ内に自動的に保存します。 「アプリグループの構成」を参照してください。
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
} )
これにより、カスタム MMKV ストレージ ID を使用して新しいストレージ インスタンスが作成されます。カスタム ストレージ ID を使用すると、ストレージはアプリのデフォルトの MMKV ストレージから分離されます。
次の値を構成できます。
id
: MMKV インスタンスの ID。複数のインスタンスを使用する場合は、異なる ID を使用してください。たとえば、グローバル アプリのストレージとログイン ユーザーのストレージを分離できます。 ( path
またはencryptionKey
フィールドが指定されている場合は必須、それ以外の場合はデフォルト: 'mmkv.default'
)path
: MMKV インスタンスのルート パス。デフォルトでは、MMKV は$(Documents)/mmkv/
内にファイルを保存します。 MMKV の初期化時に MMKV のルート ディレクトリをカスタマイズできます (ドキュメント: iOS / Android)encryptionKey
: MMKV インスタンスの暗号化/復号化キー。デフォルトでは、MMKV はすべてのキーと値をプレーン テキストでファイルに保存し、iOS/Android のサンドボックスに依存してファイルが暗号化されていることを確認します。情報漏洩が心配な場合は、MMKV の暗号化を選択できます。 (ドキュメント:iOS / Android)mode
: MMKV のプロセス動作 - MULTI_PROCESS
に設定すると、MMKV インスタンスはデータを外部 (アプリ クリップ、拡張機能、アプリ グループなど) から変更できると想定します。readOnly
: この MMKV インスタンスを読み取り専用モードにするかどうか。これは通常、より効率的であり、必要でない場合にデータへの不要な書き込みを回避します。 set(..)
を呼び出すとスローされます。 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 ( )
}
モックされた MMKV インスタンスは、Jest または Vitest でテストするときに自動的に使用されるため、テストでは通常どおりnew MMKV()
を使用できます。 Jest を使用した例については、package/example/test/MMKV.test.ts を参照してください。
ユーザーがブラウザで LocalStorage を無効にすることを選択した場合、ライブラリは代わりに限定されたメモリ内ストレージを自動的に提供します。ただし、このメモリ内ストレージにはデータが保持されないため、ユーザーがページを更新したりブラウザを閉じたりすると、データが失われる可能性があります。ユーザー エクスペリエンスを最適化するには、このシナリオに対処する適切なソリューションをアプリ内に実装することを検討してください。
Flipper を使用して MMKV ストレージをデバッグするには、flipper-plugin-react-native-mmkv を使用します。単純に MMKV インスタンスをconsole.log
こともできます。
Reactotron-react-native-mmkv を使用して、Reactotron を使用して MMKV ストレージへの書き込みを自動的に記録します。 Reactotron でこのプラグインをセットアップする方法については、ドキュメントを参照してください。
Margelo コミュニティ Discord に参加して、react-native-mmkv や他の Margelo ライブラリについてチャットしてください。
React-native-mmkv は現状のまま提供されているので、空き時間に作業します。
実稼働アプリに React-native-mmkv を統合している場合は、このプロジェクトに資金を提供することを検討してください。プレミアム エンタープライズ サポート、問題解決の支援、バグ修正の優先順位付け、機能のリクエスト、react-native-mmkv の統合の支援などを希望される場合は、私に連絡してください。
リポジトリと開発ワークフローに貢献する方法については、貢献ガイドを参照してください。
マサチューセッツ工科大学