Importante
react-native-mmkv V3 agora é um TurboModule C++ puro e requer que a nova arquitetura seja habilitada . (reação nativa 0,75+)
StorageBenchmark compara bibliotecas de armazenamento populares entre si, lendo um valor do armazenamento 1000 vezes:
MMKV vs outras bibliotecas de armazenamento : lendo um valor do armazenamento 1000 vezes.
Medido em milissegundos em um iPhone 11 Pro, quanto menor, melhor.
yarn add react-native-mmkv
cd ios && pod install
npx expo install react-native-mmkv
npx expo prebuild
Para criar uma nova instância do armazenamento MMKV, use o construtor MMKV
. É recomendável reutilizar essa instância em todo o aplicativo, em vez de criar uma nova instância a cada vez; portanto, export
o objeto storage
.
import { MMKV } from 'react-native-mmkv'
export const storage = new MMKV ( )
Isso cria uma nova instância de armazenamento usando o ID de armazenamento MMKV padrão ( mmkv.default
).
Se você quiser compartilhar dados MMKV entre seu aplicativo e outros aplicativos ou extensões de aplicativo no mesmo grupo, abra Info.plist
e crie uma chave AppGroup
com o valor do seu grupo de aplicativos. O MMKV armazenará automaticamente dados dentro do grupo de aplicativos que podem ser lidos e gravados em outros aplicativos ou extensões de aplicativos no mesmo grupo, usando o modo de multiprocessamento do MMKV. Consulte Configurando grupos de aplicativos.
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
} )
Isso cria uma nova instância de armazenamento usando um ID de armazenamento MMKV personalizado. Ao usar um ID de armazenamento personalizado, seu armazenamento é separado do armazenamento MMKV padrão do seu aplicativo.
Os seguintes valores podem ser configurados:
id
: o ID da instância MMKV. Se você quiser usar várias instâncias, use IDs diferentes. Por exemplo, você pode separar o armazenamento global do aplicativo e o armazenamento de um usuário conectado. (obrigatório se os campos path
ou encryptionKey
forem especificados, caso contrário, o padrão é: 'mmkv.default'
)path
: o caminho raiz da instância MMKV. Por padrão, MMKV armazena arquivos dentro de $(Documents)/mmkv/
. Você pode personalizar o diretório raiz do MMKV na inicialização do MMKV (documentação: iOS/Android)encryptionKey
: a chave de criptografia/descriptografia da instância MMKV. Por padrão, o MMKV armazena todos os valores-chave em texto simples no arquivo, contando com a sandbox do iOS/Android para garantir que o arquivo esteja criptografado. Caso você se preocupe com o vazamento de informações, você pode optar por criptografar o MMKV. (documentação: iOS/Android)mode
: O comportamento do processo do MMKV - quando definido como MULTI_PROCESS
, a instância MMKV assumirá que os dados podem ser alterados externamente (por exemplo, clipes de aplicativos, extensões ou grupos de aplicativos).readOnly
: se esta instância MMKV deve estar no modo somente leitura. Normalmente, isso é mais eficiente e evita gravações indesejadas nos dados, caso não sejam necessárias. Qualquer chamada para set(..)
será lançada. 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 ( )
}
Uma instância simulada de MMKV é usada automaticamente ao testar com Jest ou Vitest, então você poderá usar new MMKV()
normalmente em seus testes. Consulte package/example/test/MMKV.test.ts para obter um exemplo usando Jest.
Se um usuário optar por desabilitar o LocalStorage em seu navegador, a biblioteca fornecerá automaticamente um armazenamento limitado na memória como alternativa. No entanto, esse armazenamento na memória não persistirá os dados e os usuários poderão sofrer perda de dados se atualizarem a página ou fecharem o navegador. Para otimizar a experiência do usuário, considere implementar uma solução adequada em seu aplicativo para resolver esse cenário.
Use flipper-plugin-react-native-mmkv para depurar seu armazenamento MMKV usando Flipper. Você também pode simplesmente console.log
uma instância MMKV.
Use reatotron-react-native-mmkv para registrar automaticamente gravações em seu armazenamento MMKV usando Reactotron. Veja a documentação para saber como configurar este plugin com Reactotron.
Junte-se ao Discord da comunidade Margelo para conversar sobre react-native-mmkv ou outras bibliotecas Margelo.
react-native-mmkv é fornecido como está , eu trabalho nisso em meu tempo livre.
Se você estiver integrando react-native-mmkv em um aplicativo de produção, considere financiar este projeto e entre em contato comigo para receber suporte empresarial premium, ajuda com problemas, priorizar correções de bugs, solicitar recursos, ajuda na integração de react-native-mmkv e muito mais.
Consulte o guia de contribuição para saber como contribuir com o repositório e o fluxo de trabalho de desenvolvimento.
MIT