在 RN 0.73.7 中运行时一切正常,但 RN 74 在 Android 上失败并显示以下消息:
错误:无法创建新的 MMKV 实例:React Native 未在设备上运行。仅当可以进行同步方法调用 (JSI) 时才能使用 MMKV。如果您使用远程调试器(例如 Chrome),请切换到设备上调试器(例如 Flipper)。
RN 0.74 的新版本仍在进行中吗?所以我们可以使用 beta 通道来测试它,但我不确定它是否已准备好投入生产,或者对此没有任何想法?
您需要创建一个类似于 mmkv 存储工作方式的自定义存储类。该问题出现在 RN 0.74 和 mmkv 2.12.2 中,它们不允许在开发模式下使用 mmkv 实例。下面提供了我解决的问题。
import { MMKV } from "react-native-mmkv";
type Listener = (key: string) => void;
export class MMKVFaker {
private data: { [key: string]: string | undefined } = {};
private listeners: Listener[] = [];
getString(key: string): string | undefined {
return this.data[key];
}
set(key: string, value: string): void {
this.data[key] = value;
this.notifyListeners(key);
}
delete(key: string): void {
delete this.data[key];
this.notifyListeners(key);
}
clearAll(): void {
this.data = {};
Object.keys(this.data).forEach(key => this.notifyListeners(key));
}
addOnValueChangedListener(listener: Listener): () => void {
this.listeners.push(listener);
return () => {
const index = this.listeners.indexOf(listener);
if (index > -1) {
this.listeners.splice(index, 1);
}
}}
private notifyListeners(key: string): void {
this.listeners.forEach(listener => listener(key));
}
}
export const storage = __DEV__ ? new MMKVFaker() : new MMKV({ id: `unique-storage-id`});