Penting
react-native-mmkv V3 sekarang menjadi C++ TurboModule murni, dan memerlukan arsitektur baru untuk diaktifkan . (reaksi-asli 0,75+)
StorageBenchmark membandingkan perpustakaan penyimpanan populer satu sama lain dengan membaca nilai dari penyimpanan sebanyak 1000 kali:
MMKV vs perpustakaan penyimpanan lainnya : Membaca nilai dari Penyimpanan 1000 kali.
Diukur dalam milidetik pada iPhone 11 Pro, lebih rendah lebih baik.
yarn add react-native-mmkv
cd ios && pod install
npx expo install react-native-mmkv
npx expo prebuild
Untuk membuat instance baru dari penyimpanan MMKV, gunakan konstruktor MMKV
. Disarankan agar Anda menggunakan kembali instance ini di seluruh aplikasi Anda alih-alih membuat instance baru setiap saat, jadi export
objek storage
.
import { MMKV } from 'react-native-mmkv'
export const storage = new MMKV ( )
Tindakan ini akan membuat instans penyimpanan baru menggunakan ID penyimpanan MMKV default ( mmkv.default
).
Jika Anda ingin berbagi data MMKV antara aplikasi Anda dan aplikasi lain atau ekstensi aplikasi dalam grup yang sama, buka Info.plist
dan buat kunci AppGroup
dengan nilai grup aplikasi Anda. MMKV kemudian akan secara otomatis menyimpan data di dalam grup aplikasi yang dapat dibaca dan ditulis dari aplikasi lain atau ekstensi aplikasi dalam grup yang sama dengan memanfaatkan mode multi pemrosesan MMKV. Lihat Mengonfigurasi Grup Aplikasi.
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
} )
Tindakan ini akan membuat instans penyimpanan baru menggunakan ID penyimpanan MMKV khusus. Dengan menggunakan ID penyimpanan khusus, penyimpanan Anda dipisahkan dari penyimpanan MMKV default aplikasi Anda.
Nilai-nilai berikut dapat dikonfigurasi:
id
: ID instance MMKV. Jika Anda ingin menggunakan beberapa instance, gunakan ID yang berbeda. Misalnya, Anda dapat memisahkan penyimpanan aplikasi global dan penyimpanan pengguna yang masuk. (diperlukan jika bidang path
atau encryptionKey
ditentukan, jika tidak, defaultnya adalah: 'mmkv.default'
)path
: Jalur root instance MMKV. Secara default, MMKV menyimpan file di dalam $(Documents)/mmkv/
. Anda dapat menyesuaikan direktori root MMKV pada inisialisasi MMKV (dokumentasi: iOS / Android)encryptionKey
: Kunci enkripsi/dekripsi instans MMKV. Secara default, MMKV menyimpan semua nilai kunci dalam teks biasa pada file, mengandalkan sandbox iOS/Android untuk memastikan file dienkripsi. Jika Anda khawatir tentang kebocoran informasi, Anda dapat memilih untuk mengenkripsi MMKV. (dokumentasi: iOS / Android)mode
: Perilaku proses MMKV - bila diatur ke MULTI_PROCESS
, instance MMKV akan menganggap data dapat diubah dari luar (misalnya Klip Aplikasi, Ekstensi, atau Grup Aplikasi).readOnly
: Apakah instance MMKV ini harus dalam mode read-only. Hal ini biasanya lebih efisien dan menghindari penulisan data yang tidak diinginkan jika tidak diperlukan. Panggilan apa pun ke set(..)
akan dilakukan. 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 ( )
}
Contoh MMKV tiruan secara otomatis digunakan saat pengujian dengan Jest atau Vitest, sehingga Anda akan dapat menggunakan new MMKV()
seperti biasa dalam pengujian Anda. Lihat package/example/test/MMKV.test.ts untuk contoh penggunaan Jest.
Jika pengguna memilih untuk menonaktifkan Penyimpanan Lokal di browsernya, perpustakaan akan secara otomatis menyediakan penyimpanan dalam memori terbatas sebagai alternatif. Namun, penyimpanan dalam memori ini tidak akan menyimpan data, dan pengguna mungkin mengalami kehilangan data jika mereka menyegarkan halaman atau menutup browser mereka. Untuk mengoptimalkan pengalaman pengguna, pertimbangkan untuk menerapkan solusi yang sesuai dalam aplikasi Anda untuk mengatasi skenario ini.
Gunakan flipper-plugin-react-native-mmkv untuk men-debug penyimpanan MMKV Anda menggunakan Flipper. Anda juga dapat dengan mudah console.log
sebuah instance MMKV.
Gunakan reactotron-react-native-mmkv untuk mencatat penulisan secara otomatis ke penyimpanan MMKV Anda menggunakan Reactotron. Lihat dokumen untuk cara mengatur plugin ini dengan Reactotron.
Bergabunglah dengan Perselisihan Komunitas Margelo untuk mengobrol tentang react-native-mmkv atau perpustakaan Margelo lainnya.
react-native-mmkv disediakan apa adanya , saya mengerjakannya di waktu luang saya.
Jika Anda mengintegrasikan react-native-mmkv dalam aplikasi produksi, pertimbangkan untuk mendanai proyek ini dan hubungi saya untuk menerima dukungan perusahaan premium, bantuan mengatasi masalah, memprioritaskan perbaikan bug, meminta fitur, bantuan dalam mengintegrasikan react-native-mmkv, dan banyak lagi.
Lihat panduan berkontribusi untuk mempelajari cara berkontribusi pada repositori dan alur kerja pengembangan.
MIT