สำคัญ
react-native-mmkv V3 ตอนนี้เป็น C++ TurboModule ล้วนๆ และ ต้องการให้เปิดใช้งานสถาปัตยกรรมใหม่ (ตอบสนองพื้นเมือง 0.75+)
StorageBenchmark เปรียบเทียบไลบรารีการจัดเก็บข้อมูลยอดนิยมกับกันโดยการอ่านค่าจากพื้นที่เก็บข้อมูล 1,000 ครั้ง:
MMKV กับไลบรารีหน่วยเก็บข้อมูลอื่น : อ่านค่าจาก Storage 1,000 ครั้ง
วัดเป็นมิลลิวินาทีบน 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 ( )
ซึ่งจะสร้างอินสแตนซ์พื้นที่เก็บข้อมูลใหม่โดยใช้ ID พื้นที่เก็บข้อมูล 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
} )
ซึ่งจะสร้างอินสแตนซ์พื้นที่จัดเก็บข้อมูลใหม่โดยใช้ ID พื้นที่จัดเก็บ MMKV แบบกำหนดเอง เมื่อใช้รหัสพื้นที่จัดเก็บข้อมูลแบบกำหนดเอง พื้นที่เก็บข้อมูลของคุณจะถูกแยกออกจากพื้นที่จัดเก็บ MMKV เริ่มต้นของแอปของคุณ
สามารถกำหนดค่าต่อไปนี้ได้:
id
: ID ของอินสแตนซ์ MMKV หากคุณต้องการใช้หลายอินสแตนซ์ ให้ใช้ ID ที่แตกต่างกัน ตัวอย่างเช่น คุณสามารถแยกพื้นที่เก็บข้อมูลของแอปส่วนกลางและพื้นที่เก็บข้อมูลของผู้ใช้ที่เข้าสู่ระบบได้ (จำเป็นหากมีการระบุฟิลด์ 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 จะถือว่าข้อมูลสามารถเปลี่ยนแปลงได้จากภายนอก (เช่น App Clips, Extensions หรือ App Groups)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 เพื่อพูดคุยเกี่ยวกับ react-native-mmkv หรือห้องสมุด Margelo อื่นๆ
react-native-mmkv มีให้ ตามที่เป็นอยู่ ฉันทำงานกับมันในเวลาว่าง
หากคุณกำลังผสานรวม react-native-mmkv ในแอปที่ใช้งานจริง ให้พิจารณาให้ทุนสนับสนุนโปรเจ็กต์นี้และติดต่อฉันเพื่อรับการสนับสนุนระดับพรีเมียมสำหรับองค์กร ความช่วยเหลือเกี่ยวกับปัญหา จัดลำดับความสำคัญการแก้ไขข้อบกพร่อง ขอคุณสมบัติ ความช่วยเหลือในการผสานรวม react-native-mmkv และอื่นๆ
ดูคู่มือการมีส่วนร่วมเพื่อเรียนรู้วิธีมีส่วนร่วมในพื้นที่เก็บข้อมูลและเวิร์กโฟลว์การพัฒนา
เอ็มไอที