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)