重要的
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
建構子。建議您在整個應用程式中重複使用此實例,而不是每次都建立新實例,因此export
storage
物件。
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 ( )
}
使用 Jest 或 Vitest 進行測試時,會自動使用模擬的 MMKV 實例,因此您將能夠在測試中正常使用new MMKV()
。有關使用 Jest 的範例,請參閱 package/example/test/MMKV.test.ts。
如果使用者選擇在瀏覽器中停用 LocalStorage,則該程式庫將自動提供有限的記憶體儲存作為替代方案。但是,這種記憶體儲存不會持久保存數據,如果使用者刷新頁面或關閉瀏覽器,可能會遇到資料遺失的情況。為了優化用戶體驗,請考慮在您的應用程式中實施合適的解決方案來解決這種情況。
使用 Flipper-plugin-react-native-mmkv 來調試使用 Flipper 的 MMKV 儲存。您也可以簡單地console.log
MMKV 實例。
使用 Reactotron-react-native-mmkv 自動記錄 MMKV 儲存的寫入。有關如何使用 Reactotron 設定此插件的信息,請參閱文件。
加入 Margelo 社群 Discord來討論 react-native-mmkv 或其他 Margelo 函式庫。
React-native-mmkv按原樣提供,我在空閒時間研究它。
如果您要在生產應用程式中整合react-native-mmkv,請考慮資助該專案並聯絡我以獲得高級企業支援、協助解決問題、優先修復錯誤、請求功能、協助整合react-native-mmkv等等。
請參閱貢獻指南,了解如何為儲存庫和開發工作流程做出貢獻。
麻省理工學院