npm instalar react-native-mmkv-storage
pré-construção da exposição
Esta biblioteca tem como objetivo fornecer uma solução rápida e confiável para suas necessidades de armazenamento de dados em aplicativos nativos de reação. Ele usa MMKV da Tencent nos bastidores no Android e iOS, ambos usados pelo aplicativo WeChat (mais de 1 bilhão de usuários). Ao contrário de outras soluções de armazenamento para React Native, esta biblioteca permite armazenar qualquer tipo de dados, em qualquer número de instâncias de banco de dados, com ou sem criptografia, de forma muito rápida e eficiente. Leia sobre isso nesta postagem do blog que escrevi em dev.to
Aprenda como construir seu próprio módulo com JSI no meu blog
Funciona apenas com react nativo 0.71.0 e superior. Se você estiver usando uma versão mais antiga do react nativo, continue usando 0.8.x.
A partir da v0.5.0
a biblioteca foi reescrita em C++ no Android e no iOS. Ele emprega React Native JSI, tornando-o a opção de armazenamento mais rápida para React Native.
(~ 50K Android/30K iOS) e ainda menor quando embalado.
MMKV usa mmap para manter a memória sincronizada com o arquivo e protobuf para codificar/decodificar valores para obter melhor desempenho. Você pode ver os benchmarks aqui: Android e iOS
useMMKVStorage
e useIndex
Os ganchos permitem que o armazenamento atualize seu aplicativo quando ocorre uma alteração no armazenamento.
useMMKVStorage
A partir da v0.5.5
, graças ao poder do JSI, agora temos nosso próprio gancho useMMKVStorage
. Pense nisso como um estado persistente que sempre gravará todas as alterações no armazenamento e atualizará a interface do usuário do seu aplicativo instantaneamente. Não importa se você recarrega o aplicativo ou o reinicia.
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 >
) ;
} ;
Saiba mais sobre useMMKVStorage
e conecte-o na documentação.
useIndex
Um gancho que pegará um array de chaves e retornará um array de valores para essas chaves. Supõe-se que isso funcione em combinação com Transações. Depois de criar seu índice personalizado, você precisará de uma maneira fácil e rápida de carregar valores para seu índice. O gancho useIndex escuta ativamente todas as alterações de leitura/gravação e atualiza os valores de acordo.
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 >
}
Saiba mais sobre useIndex
e conecte-o na documentação.
Ouça o ciclo de vida de um valor e altere-o em qualquer lugar. As transações permitem registrar funções de ciclo de vida com sua instância de armazenamento, como leitura, gravação e exclusão. Isso permite um controle melhor e mais gerenciado sobre o armazenamento e também permite criar índices personalizados com algumas linhas de código.
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 ) ) ;
}
} ) ;
Saiba mais sobre como usar transações em documentos
MMKV suporta acesso simultâneo de leitura-leitura e leitura-gravação entre processos. Isso significa que você pode usar MMKV para várias extensões e widgets e para seu aplicativo.
Você pode criar muitas instâncias de banco de dados. Isso ajuda muito se você tiver lógicas/módulos separados no mesmo aplicativo que usam dados de maneira diferente. Também ajuda no melhor desempenho, pois cada instância de banco de dados é pequena, em vez de um único banco de dados volumoso, o que torna as coisas mais lentas à medida que cresce.
const userStorage = new MMKVLoader ( ) . withEncryption ( ) . withInstanceID ( 'userdata' ) . initialize ( ) ;
const settingsStorage = new MMKVLoader ( ) . withInstanceID ( 'settings' ) . initialize ( ) ;
A biblioteca suporta criptografia completa (AES CFB-128) em Android e iOS. Você pode optar por armazenar sua chave de criptografia com segurança para uso contínuo. A biblioteca usa Keychain no iOS e Android Keystore no Android (API 23 e superior). Criptografar uma instância é simples:
const storage = new MMKVLoader ( )
. withEncryption ( ) // Generates a random key and stores it securely in Keychain
. initialize ( ) ;
E é isso.
Para cada instância de banco de dados, existe um índice de chave global e, em seguida, existem índices de cada tipo de dados. Portanto, consultar é fácil e rápido.
O suporte para redux persist também foi adicionado a partir da v0.3.2.
Você pode usar esta biblioteca com fluxo de trabalho simples de exposição.
Graças ao plugin pnthach95 Flipper está finalmente aqui. https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage. Ele suporta registro e manipulação de valores de armazenamento em tempo real.
Se você estiver usando a biblioteca em um de seus projetos, considere apoiar com uma estrela. É preciso muito tempo e esforço para mantê-lo atualizado e resolver problemas e bugs. Obrigado.
Isso é uma notícia incrível! Há muita coisa acontecendo em um ritmo muito rápido nesta biblioteca agora. Cada pequena ajuda é preciosa. Você pode contribuir de diversas maneiras:
Esta biblioteca está licenciada sob a licença MIT.
Direitos autorais © Ammar Ahmed (@ammarahm-ed)