当前位置: 首页 > news >正文

ReactNative 使用腾讯的MMKV持久化存储

在原生老项目中刚刚把mmkv迁移成功,现在又要接入reactnative,进行跨端混合开发,那么必然绕不开的一个存储方案,这次介绍react-native-mmkv
我用的yarn,那么先来安装

yarn add react-native-mmkv

安装成功后使用,我简单用AI封装了一下,作为项目底层键值对存储方案使用


import {MMKV} from 'react-native-mmkv';

/**
 * 项目持久化存储实例
 */
export class MMKVManage {

    private static instance: MMKVManage;
    private mmkv: MMKV;

    constructor() {
        this.mmkv = new MMKV();
    }

    public static getInstance(): MMKVManage {
        if (!MMKVManage.instance) {
            MMKVManage.instance = new MMKVManage();
        }
        return MMKVManage.instance;
    }

    public getItem<T = any>(key: string): T | null {
        return this.mmkv.getString(key) as T; // 根据需要调整类型转换
    }

    public setItem(key: string, value: any): void {
        if (typeof value === 'string') {
            this.mmkv.set(key, value);
        } else {
            this.mmkv.set(key, JSON.stringify(value)); // 对于非字符串类型,先转换为字符串存储
        }
    }

    public removeItem(key: string): void {
        this.mmkv.delete(key);
    }
}

那么基础存储方案写好以后,如何使用呢看下方中间层封装字段

import {MMKVManage} from './MMKVManage.ts';

export class LocalStorage {
  private static instance: LocalStorage;

  constructor() {}

  public static getInstance(): LocalStorage {
    if (!LocalStorage.instance) {
      LocalStorage.instance = new LocalStorage();
    }
    return LocalStorage.instance;
  }

  public getTeacherId(): string {
    return <string>MMKVManage.getInstance().getItem('teacherId');
  }

  public setTeacherId(teacherId: string): void {
    MMKVManage.getInstance().setItem('teacherId', teacherId);
  }
}

最后在业务中进行使用

<Button
        title={'保存数据'}
        onPress={() => {
          LocalStorage.getInstance().setTeacherId('123456');
          Alert.alert('保存成功');
        }}
      />
      <Button
        title={'读取数据'}
        onPress={() => {
          let teacherId = LocalStorage.getInstance().getTeacherId();
          setId(teacherId);
          Alert.alert('获取成功' + teacherId);
        }}
      />

应该是比较简单吧,我用的版本给出来
react-native:0.78.1
mmkv:3.2.0
node:22.12.0

如果你跑不起来,千万别喷我,先看看你的版本配置是否兼容,我确实是成功了!!!

相关文章:

  • 深入浅出:信号灯与系统V信号灯的实现与应用
  • 区块链点燃游戏行业新未来——技术变革与实践指南
  • 【Linux网络与网络编程】08.传输层协议 UDP
  • 互联网三高-数据库高并发之分库分表
  • PostgreSQL 的统计信息
  • 0x02.Redis 集群的实现原理是什么?
  • 80_Pandas如何使用NumPy的函数等(pd.np)
  • 【图像生成之21】融合了Transformer与Diffusion,Meta新作Transfusion实现图像与语言大一统
  • Hadoop文件操作指南:深入解析文件操作
  • 北洋底标印记纪年
  • TDengine 可靠性保障:数据持久化与容灾备份(二)
  • ZYNQ笔记(六):自定义IP核-LED呼吸灯
  • [特殊字符] 第十二讲 | 地统计学基础与克里金插值法(Kriging)建模实践
  • JavaScript异常机制与严格模式
  • 源码编译 Galera、MySQL 5.7 Wsrep 和安装 MySQL 5.7 Galera集群
  • JavaScript数组方法:`some()`的全面解析与应用
  • 简单使用linux
  • 论文精度:基于LVNet的高效混合架构:多帧红外小目标检测新突破
  • python推箱子游戏
  • Linux进阶命令
  • 重庆南岸营销型网站建设公司哪家专业/网站建站公司
  • 制作网站的公司做网站去哪里找/南宁网站建设网络公司
  • 免费产品网站建设/如何进行品牌营销
  • ci框架的网站/网络安全
  • 崇明区建设镇政府网站/天津百度搜索排名优化
  • 网站怎么做优化/长沙网络推广