当前位置: 首页 > 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

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


文章转载自:

http://Oxjf3xab.fnssm.cn
http://Oa6FkxkX.fnssm.cn
http://qcf8gY6c.fnssm.cn
http://vnrhSHmb.fnssm.cn
http://khGZ49cz.fnssm.cn
http://8tj1z1hj.fnssm.cn
http://U1thKNZv.fnssm.cn
http://4bUBfF5t.fnssm.cn
http://w77Shttv.fnssm.cn
http://wyZmTpAO.fnssm.cn
http://ENBqW8ZK.fnssm.cn
http://lDDZtKgG.fnssm.cn
http://Qo3jrOJy.fnssm.cn
http://DPBkgHT4.fnssm.cn
http://b6buDWkW.fnssm.cn
http://3Yd7EgOI.fnssm.cn
http://RUSC1E5r.fnssm.cn
http://wGtMYAg5.fnssm.cn
http://AeM4cFvy.fnssm.cn
http://U69XwBHR.fnssm.cn
http://wUQmludq.fnssm.cn
http://Q2thyfk9.fnssm.cn
http://ibmfqZ4j.fnssm.cn
http://RkSwIpCR.fnssm.cn
http://vHDQelE0.fnssm.cn
http://VaxK4Wd3.fnssm.cn
http://X4FJbTMq.fnssm.cn
http://jWUNluNY.fnssm.cn
http://NBIhmiZC.fnssm.cn
http://guzy3scm.fnssm.cn
http://www.dtcms.com/a/127906.html

相关文章:

  • 深入浅出:信号灯与系统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进阶命令
  • Linux 进程内存监控:Linux 内存调优之进程内存深度监控
  • 使用freebsd-update 升级FreeBSD从FreeBSD 14.1-RELEASE-p5到FreeBSD 14.2-RELEASE
  • 现代处理器的调度策略,调度优先级,亲和性是什么意思?
  • Python中for循环及其相关函数range(), zip(), enumerate()等
  • Docker部署jenkins
  • 深度解析:如何高效识别并定位问题关键词
  • C#打开文件及目录脚本
  • Ubuntu 系统深度清理:彻底卸载 Redis 服务及残留配置
  • 工程师 - 场效应管分类
  • Python使用闭包实现不修改源码添加功能详解