중요한
React-native-mmkv V3는 이제 순수 C++ TurboModule이며 활성화하려면 새로운 아키텍처가 필요합니다 . (반응 네이티브 0.75+)
StorageBenchmark는 스토리지에서 값을 1000번 읽어 널리 사용되는 스토리지 라이브러리를 서로 비교합니다.
MMKV 대 다른 스토리지 라이브러리 : Storage에서 값을 1000번 읽습니다.
iPhone 11 Pro에서 밀리초 단위로 측정하면 낮을수록 좋습니다.
yarn add react-native-mmkv
cd ios && pod install
npx expo install react-native-mmkv
npx expo prebuild
MMKV 저장소의 새 인스턴스를 만들려면 MMKV
생성자를 사용하세요. 매번 새 인스턴스를 생성하는 대신 전체 앱에서 이 인스턴스를 재사용하는 것이 권장되므로 storage
개체를 export
.
import { MMKV } from 'react-native-mmkv'
export const storage = new MMKV ( )
그러면 기본 MMKV 스토리지 ID( 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
} )
그러면 사용자 지정 MMKV 스토리지 ID를 사용하여 새 스토리지 인스턴스가 생성됩니다. 사용자 정의 저장소 ID를 사용하면 저장소가 앱의 기본 MMKV 저장소와 분리됩니다.
다음 값을 구성할 수 있습니다.
id
: MMKV 인스턴스의 ID입니다. 여러 인스턴스를 사용하려면 다른 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 인스턴스는 데이터가 외부(예: 앱 클립, 확장 프로그램 또는 앱 그룹)에서 변경될 수 있다고 가정합니다.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 ( )
}
Jest 또는 Vitest로 테스트할 때 모의 MMKV 인스턴스가 자동으로 사용되므로 테스트에서 정상적으로 new MMKV()
사용할 수 있습니다. Jest를 사용하는 예제는 package/example/test/MMKV.test.ts를 참조하세요.
사용자가 브라우저에서 LocalStorage를 비활성화하기로 선택한 경우 라이브러리는 대안으로 제한된 메모리 내 저장소를 자동으로 제공합니다. 그러나 이 메모리 내 저장소는 데이터를 유지하지 않으며 사용자가 페이지를 새로 고치거나 브라우저를 닫을 경우 데이터 손실이 발생할 수 있습니다. 사용자 환경을 최적화하려면 이 시나리오를 해결하기 위해 앱 내에 적합한 솔루션을 구현하는 것을 고려하세요.
Flipper를 사용하여 MMKV 저장소를 디버그하려면 Flipper-plugin-react-native-mmkv를 사용하세요. 간단히 MMKV 인스턴스를 console.log
할 수도 있습니다.
Reactotron-react-native-mmkv를 사용하면 Reactotron을 사용하여 MMKV 저장소에 쓰기를 자동으로 기록할 수 있습니다. Reactotron으로 이 플러그인을 설정하는 방법은 문서를 참조하세요.
Margelo Community Discord에 참여하여 React-native-mmkv 또는 기타 Margelo 라이브러리에 대해 이야기해 보세요.
React-native-mmkv는 있는 그대로 제공되므로 여가 시간에 작업합니다.
프로덕션 앱에 React-native-mmkv를 통합하는 경우 이 프로젝트에 자금을 지원하는 것을 고려하고 저에게 연락하여 프리미엄 엔터프라이즈 지원, 문제에 대한 지원, 버그 수정 우선 순위 지정, 기능 요청, 반응 네이티브-mmkv 통합에 대한 지원 등을 받으십시오.
저장소 및 개발 워크플로에 기여하는 방법을 알아보려면 기여 가이드를 참조하세요.
MIT