npm установить реагирование-родное-mmkv-хранилище
предварительная сборка выставки
Цель этой библиотеки — предоставить быстрое и надежное решение для хранения данных в приложениях, реагирующих на реакцию. Он использует MMKV от Tencent на Android и iOS, который используется их приложением WeChat (более 1 миллиарда пользователей). В отличие от других решений хранения для React Native, эта библиотека позволяет очень быстро и эффективно хранить данные любого типа в любом количестве экземпляров базы данных с шифрованием или без него. Прочтите об этом в этом сообщении в блоге, которое я написал на dev.to.
Узнайте, как создать свой собственный модуль с помощью JSI, в моем блоге.
Работает только с React Native 0.71.0 и выше. Если вы используете более старую версию React Native, продолжайте использовать 0.8.x.
Начиная с v0.5.0
библиотека переписана на C++ как для Android, так и для iOS. Он использует React Native JSI, что делает его самым быстрым вариантом хранения для React Native.
(~ 50 тыс. Android/30 тыс. iOS) и даже меньше в упаковке.
MMKV использует mmap для синхронизации памяти с файлом и protobuf для кодирования/декодирования значений для достижения наилучшей производительности. Вы можете увидеть тесты здесь: Android и iOS.
useMMKVStorage
и useIndex
Хуки позволяют хранилищу обновлять ваше приложение, когда в хранилище происходят изменения.
useMMKVStorage
Hook Начиная с v0.5.5
, благодаря возможностям JSI, у нас теперь есть собственный useMMKVStorage
Hook. Думайте об этом как о постоянном состоянии, которое всегда записывает каждое изменение в хранилище и мгновенно обновляет пользовательский интерфейс вашего приложения. Не имеет значения, перезагрузите ли вы приложение или перезапустите его.
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 ( ) ;
Библиотека поддерживает полное шифрование (AES CFB-128) на Android и iOS. Вы можете выбрать безопасное хранение своего ключа шифрования для постоянного использования. Библиотека использует Keychain на iOS и Android Keystore на Android (API 23 и выше). Зашифровать экземпляр просто:
const storage = new MMKVLoader ( )
. withEncryption ( ) // Generates a random key and stores it securely in Keychain
. initialize ( ) ;
И все.
Для каждого экземпляра базы данных существует один индекс глобального ключа, а также индексы каждого типа данных. Таким образом, запросы выполняются легко и быстро.
Поддержка сохранения избыточности также добавляется, начиная с версии 0.3.2.
Вы можете использовать эту библиотеку с открытым рабочим процессом.
Благодаря pnthach95 плагин Flipper наконец-то появился. https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage. Он поддерживает регистрацию и управление значениями хранилища на лету.
Если вы используете библиотеку в одном из своих проектов, рассмотрите возможность поддержки звездочкой. Поддержание его в рабочем состоянии и устранение проблем и ошибок требует много времени и усилий. Спасибо.
Это потрясающая новость! Сейчас в этой библиотеке очень быстро происходит многое. Каждая маленькая помощь драгоценна. Вы можете внести свой вклад разными способами:
Эта библиотека лицензируется по лицензии MIT.
Авторские права © Аммар Ахмед (@ammarahm-ed)