npm 安裝react-native-mmkv-storage
世博預建
該程式庫旨在為您在反應本機應用程式中的資料儲存需求提供快速可靠的解決方案。它在 Android 和 iOS 上使用騰訊的 MMKV,微信應用程式(超過 10 億用戶)使用該 MMKV。與 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 最快的儲存選項。
(~ 50K Android/30K iOS),包裝後甚至更小。
MMKV 使用 mmap 來保持記憶體與檔案同步,並使用 protobuf 來編碼/解碼值以實現最佳效能。您可以在此處查看基準測試:Android 和 iOS
useMMKVStorage
和useIndex
Hooks 進行響應式當儲存發生變更時,掛鉤可以讓儲存空間更新您的應用程式。
useMMKVStorage
鉤子從v0.5.5
開始,得益於 JSI 的強大功能,我們現在有了自己的useMMKVStorage
Hook。將其視為一種持久狀態,始終將每次變更寫入儲存體並立即更新您的應用程式 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
hook 的更多資訊。
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
hook 的更多資訊。
監聽值的生命週期並隨時改變它。事務可讓您向儲存實例註冊生命週期功能,例如讀取、寫入和刪除。這樣可以對儲存進行更好、更易於管理的控制,還可以讓您使用幾行程式碼建立自訂索引。
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 上使用 Keychain,在 Android 上使用 Android Keystore(API 23 及更高版本)。加密實例很簡單:
const storage = new MMKVLoader ( )
. withEncryption ( ) // Generates a random key and stores it securely in Keychain
. initialize ( ) ;
就是這樣。
對於每個資料庫實例,有一個全域鍵索引,然後有每種資料的索引。因此查詢既簡單又快速。
從 v0.3.2 開始也加入了對 redux persist 的支援。
您可以將此庫與 expo bare 工作流程一起使用。
感謝 pnthach95 Flipper 外掛終於來了。 https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage。它支援動態記錄和操作儲存值。
如果您在某個專案中使用該程式庫,請考慮給予支援。維護這一點並解決問題和錯誤需要花費大量的時間和精力。謝謝。
這是一個很棒的消息!現在這個圖書館正在以非常快的速度發生很多事情。每一個小小的幫助都是寶貴的。您可以透過多種方式做出貢獻:
該庫根據 MIT 許可證獲得許可。
版權所有 © Ammar Ahmed (@ammarahm-ed)