react-native-mmkv
Version:
⚡️ The fastest key/value storage for React Native.
46 lines (39 loc) • 1.39 kB
text/typescript
import { useRef } from 'react'
import type { MMKV } from '../specs/MMKV.nitro'
import type { Configuration } from '../specs/MMKVFactory.nitro'
import { getDefaultMMKVInstance } from '../createMMKV/getDefaultMMKVInstance'
import { createMMKV } from '../createMMKV/createMMKV'
function isConfigurationEqual(
left?: Configuration,
right?: Configuration
): boolean {
if (left == null || right == null) return left == null && right == null
return (
left.encryptionKey === right.encryptionKey &&
left.id === right.id &&
left.path === right.path &&
left.mode === right.mode
)
}
/**
* Use the default, shared MMKV instance.
*/
export function useMMKV(): MMKV
/**
* Use a custom MMKV instance with the given configuration.
* @param configuration The configuration to initialize the MMKV instance with. Does not have to be memoized.
*/
export function useMMKV(configuration: Configuration): MMKV
export function useMMKV(configuration?: Configuration): MMKV {
const instance = useRef<MMKV>(undefined)
const lastConfiguration = useRef<Configuration>(undefined)
if (configuration == null) return getDefaultMMKVInstance()
if (
instance.current == null ||
!isConfigurationEqual(lastConfiguration.current, configuration)
) {
lastConfiguration.current = configuration
instance.current = createMMKV(configuration)
}
return instance.current
}