Важный
реакции-native-mmkv V3 теперь является чистым турбомодулем C++ и требует включения новой архитектуры . (реакция 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 по умолчанию ( 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. При использовании пользовательского идентификатора хранилища ваше хранилище отделяется от хранилища MMKV по умолчанию вашего приложения.
Можно настроить следующие значения:
id
: идентификатор экземпляра MMKV. Если вы хотите использовать несколько экземпляров, используйте разные идентификаторы. Например, вы можете разделить глобальное хранилище приложения и хранилище вошедшего в систему пользователя. (обязательно, если указаны поля 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()
в своих тестах как обычно. Обратитесь к package/example/test/MMKV.test.ts для примера использования Jest.
Если пользователь решит отключить LocalStorage в своем браузере, библиотека автоматически предоставит в качестве альтернативы ограниченное хранилище в памяти. Однако это хранилище в памяти не сохраняет данные, и пользователи могут столкнуться с потерей данных, если обновят страницу или закроют браузер. Чтобы оптимизировать взаимодействие с пользователем, рассмотрите возможность внедрения подходящего решения в своем приложении для решения этой ситуации.
Используйте flipper-plugin-react-native-mmkv для отладки вашего хранилища MMKV с помощью Flipper. Вы также можете просто console.log
экземпляр MMKV.
Используйте Reactotron-react-native-mmkv для автоматической регистрации записей в хранилище MMKV с помощью Reactotron. См. документацию о том, как настроить этот плагин с помощью Reactotron.
Присоединяйтесь к Discord сообщества Margelo , чтобы поговорить о реакции-native-mmkv или других библиотеках Margelo.
response-native-mmkv предоставляется как есть , я работаю над ним в свободное время.
Если вы интегрируете React-native-mmkv в производственное приложение, рассмотрите возможность финансирования этого проекта и свяжитесь со мной, чтобы получить премиальную корпоративную поддержку, помощь в решении проблем, определение приоритетности исправлений ошибок, запрос функций, помощь в интеграции React-native-mmkv и многое другое.
См. руководство по участию, чтобы узнать, как внести свой вклад в репозиторий и рабочий процесс разработки.
Массачусетский технологический институт