Importante
react-native-mmkv V3 es ahora un TurboModule de C++ puro y requiere que la nueva arquitectura esté habilitada . (reaccionar-nativo 0.75+)
StorageBenchmark compara bibliotecas de almacenamiento populares entre sí leyendo un valor del almacenamiento 1000 veces:
MMKV frente a otras bibliotecas de almacenamiento : lectura de un valor del almacenamiento 1000 veces.
Medido en milisegundos en un iPhone 11 Pro, cuanto más bajo, mejor.
yarn add react-native-mmkv
cd ios && pod install
npx expo install react-native-mmkv
npx expo prebuild
Para crear una nueva instancia del almacenamiento MMKV, utilice el constructor MMKV
. Se recomienda reutilizar esta instancia en toda la aplicación en lugar de crear una nueva instancia cada vez, así que export
el objeto storage
.
import { MMKV } from 'react-native-mmkv'
export const storage = new MMKV ( )
Esto crea una nueva instancia de almacenamiento utilizando el ID de almacenamiento MMKV predeterminado ( mmkv.default
).
Si desea compartir datos MMKV entre su aplicación y otras aplicaciones o extensiones de aplicaciones en el mismo grupo, abra Info.plist
y cree una clave AppGroup
con el valor de su grupo de aplicaciones. Luego, MMKV almacenará automáticamente datos dentro del grupo de aplicaciones que se pueden leer y escribir desde otras aplicaciones o extensiones de aplicaciones en el mismo grupo haciendo uso del modo de procesamiento múltiple de MMKV. Consulte Configuración de grupos de aplicaciones.
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
} )
Esto crea una nueva instancia de almacenamiento utilizando una ID de almacenamiento MMKV personalizada. Al utilizar una ID de almacenamiento personalizada, su almacenamiento se separa del almacenamiento MMKV predeterminado de su aplicación.
Se pueden configurar los siguientes valores:
id
: el ID de la instancia MMKV. Si desea utilizar varias instancias, utilice ID diferentes. Por ejemplo, puede separar el almacenamiento de la aplicación global y el almacenamiento de un usuario que ha iniciado sesión. (obligatorio si se especifican los campos path
o encryptionKey
; de lo contrario, el valor predeterminado es: 'mmkv.default'
)path
: la ruta raíz de la instancia MMKV. De forma predeterminada, MMKV almacena el archivo dentro de $(Documents)/mmkv/
. Puede personalizar el directorio raíz de MMKV en la inicialización de MMKV (documentación: iOS/Android)encryptionKey
: la clave de cifrado/descifrado de la instancia MMKV. De forma predeterminada, MMKV almacena todos los valores-clave en texto sin formato en el archivo, confiando en el entorno limitado de iOS/Android para asegurarse de que el archivo esté cifrado. Si le preocupa la filtración de información, puede optar por cifrar MMKV. (documentación: iOS/Android)mode
: el comportamiento del proceso de MMKV; cuando se establece en MULTI_PROCESS
, la instancia de MMKV asumirá que los datos se pueden cambiar desde el exterior (por ejemplo, clips de aplicaciones, extensiones o grupos de aplicaciones).readOnly
: si esta instancia MMKV debe estar en modo de solo lectura. Esto suele ser más eficiente y evita escrituras no deseadas en los datos si no son necesarios. Cualquier llamada a set(..)
será arrojada. 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 ( )
}
Una instancia MMKV simulada se usa automáticamente cuando se prueba con Jest o Vitest, por lo que podrá usar new MMKV()
como de costumbre en sus pruebas. Consulte paquete/example/test/MMKV.test.ts para ver un ejemplo usando Jest.
Si un usuario elige desactivar LocalStorage en su navegador, la biblioteca proporcionará automáticamente un almacenamiento en memoria limitado como alternativa. Sin embargo, este almacenamiento en memoria no conservará los datos y los usuarios pueden experimentar pérdida de datos si actualizan la página o cierran su navegador. Para optimizar la experiencia del usuario, considere implementar una solución adecuada dentro de su aplicación para abordar este escenario.
Utilice flipper-plugin-react-native-mmkv para depurar su almacenamiento MMKV usando Flipper. También puedes simplemente console.log
una instancia MMKV.
Utilice reactotron-react-native-mmkv para registrar automáticamente las escrituras en su almacenamiento MMKV utilizando Reactotron. Consulte los documentos para saber cómo configurar este complemento con Reactotron.
Únase a la comunidad de Margelo en Discord para conversar sobre react-native-mmkv u otras bibliotecas de Margelo.
react-native-mmkv se proporciona tal cual , trabajo en ello en mi tiempo libre.
Si está integrando reaccionar-native-mmkv en una aplicación de producción, considere financiar este proyecto y contácteme para recibir soporte empresarial premium, ayuda con problemas, priorizar correcciones de errores, solicitar funciones, ayuda para integrar reaccionar-native-mmkv y más.
Consulte la guía de contribución para aprender cómo contribuir al repositorio y al flujo de trabajo de desarrollo.
MIT