一分钟实现,一个RN持久数据管理器

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
简介: 在React Native开发过程中,总避免不了需要存储一些数据在本地。对于大多数应用只需要存储一些结构简单的数据,如标记位,用户信息等。这时候我们首选择的存储方式就是AsyncStorage,那我们先来看下AsyncStorage给我提供了哪些基本方法: 可以看出AsyncStorage已经包含set、get、remove、clear等一系列静态方法,基本上已经满足了我们对数据增、删、改、查(CURD 下文中我都统一使用简称)的需求。

在React Native开发过程中,总避免不了需要存储一些数据在本地。对于大多数应用只需要存储一些结构简单的数据,如标记位,用户信息等。这时候我们首选择的存储方式就是AsyncStorage,那我们先来看下AsyncStorage给我提供了哪些基本方法:

AsyncStorage_methods

可以看出AsyncStorage已经包含set、get、remove、clear等一系列静态方法,基本上已经满足了我们对数据增、删、改、查(CURD 下文中我都统一使用简称)的需求。对于AsyncStorage的使用,官网建议我们再封装一层,而不是直接使用AsyncStorage。

那我们先在网上搜索一下看看大家是怎么封装AsyncStorage的。通过在网上大量的搜索与对比,我把大家的封装方式分为三类:

  1. 重复造轮式
    这种封装方式,基本上是新建一个可导出的类,加入几个静态的CURD方法,然后在相应的静态方法里面直接调用AsyncStorage的CURD方法,其它的不做任何处理。【这种‘‘简陋’’的封装,还不如不封装
  2. 类型转换式
    这种封装方式,相较于重复造轮式,增加了类型转换和异常捕获,使得AsyncStorage的数据存的类型不再局限于string,可以保存对象、数组等结构数据类型,对于取数据的时候也做相应的转换【基本满足开发需求,但使用不够简单
  3. 过度封装式
    这种封装方式,给AsyncStorage的操作增加了很多附加的存、取可选项,比如增加Where条件查询,保存,这种表面上看着封装之后对AsyncStorage的操作变得更“灵活”,功能“更强大”,实则很鸡肋。【多此一举,为何不选择 sqlite 库】

虽然AsyncStorage的底层是sqlite db实现的,并不是表示我们就得让AsyncStorage支持sqlite的各种标准的数据库操作,AsyncStorage被设计出来的初衷就是用于存取一些结构相对简单的数据,如果真要操作大量、复杂的数据那就应该选择RN的 sqlite库去实现。

通过以上这几类方式的对比,发现第二种AsyncStorage封装方式的是比较合适的。在使用过程中基本也是以Key-Value的形式是存、取数据。但是如果项目中有大量的数据存、取操作时。这个Keys的维护是一个难题:

  1. 在访问AsyncStorage的地方,手动写key,如:XXX.get('userId'),这种方式缺点也很明显,如果有大量地同一属性的操作,得写很多遍,因此也增加了写错的可能性,Coding体验非常不好。
  2. 定义属性常量Key,通过常量Key去访问属性,如:XXX.get(Const.User_Id),在属性访问比较频繁的时候,可能这种方式比较合适。但这样又“额外”的引入了常量集合资源,增加了项目的复杂度。

没有更好的方式去访问AsyncStorage呢?当然有,这里就要进入我们今天的主题了,【怎样一分钟实现一个AsyncStorage 访问器】,且在使用的时候也能方便,快捷的访问AsyncStorage数据。

第一步:
花 10 秒钟定义一个全局可导出的数据管理对象及需要存储的userId属性,如:

export const RNStorage = {// 持久化数据列表
    userId: undefined, // 用户ID
};

第二步:
再花 20 秒的时间,在程序初始化的地方引入XStorage,并调用初始化绑定RNStroage,然后你就可以随意的访问RNStorage中的属性了。

import { XStorage } from 'react-native-easy-app';
import { AsyncStorage } from 'react-native';

XStorage.initStorage(RNStorage,AsyncStorage,() => {
    // 绑定完成,现在您就可以随意访问RNStorage中的任何数据了
    RNStorage.userId = '#@23DF424FGD234DKT45IU'; // 相当于AsyncStorage.setItem('userId','#@23DF424FGD234DKT45IU')
    console.log('userId=' + RNStorage.userId); // 相当于console.log(await AsyncStorage.getItem('userId'))
});

第三步:

  • 再花10秒的时间输入npm库安装命令( js库大小不到60k )
    安装方式(2选1):

yarn add react-native-easy-app
npm install react-native-easy-app --save

剩下20秒的时间,您只需要端起咖啡等待 react-native-easy-app 库的安装完成。


有没有很简单,花了1分钟不到的时间就构建了一个RN的AsyncStorage数据访问管理器,从此以后,如果有任何新的数据需要保存到AsyncStorage中,只需要在RNStorage对象中定义相应的属性字段即可。RNStorage的属性字段对数据的类型有 stringboolobject 等各种类型的支持。总之一句话:您可以像访问内存对象一样同步访问RNStorage里面定义的任何属性,这些属性会被自动同步到AsyncStorage中。

示例项目:react-native-easy-app-sample 中的 StorageController 页面包含RNStorage的数据存、取的应用实现,大家可以参考。

这样文章开头AsyncStorage的第二种封装方式的访问问题就迎刃而解了,或许你还不放心,也不懂RNStorage的实现原理,那你可以看看这篇文章:

react-native-easy-app 详解与使用之(一) AsyncStorage

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
目录
相关文章
|
6月前
|
SQL 分布式计算 关系型数据库
实时数仓 Hologres产品使用合集之分区表创建冷热分层后,查询语法会与原先有区别吗
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
6月前
|
分布式计算 关系型数据库 数据挖掘
实时数仓 Hologres产品使用合集之当使用动态分区管理功能按日期进行分区后,通过主键和segment_key进行时间范围查询性能变差是什么原因
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
2月前
|
消息中间件 存储 缓存
大数据-71 Kafka 高级特性 物理存储 磁盘存储特性 如零拷贝、页缓存、mmp、sendfile
大数据-71 Kafka 高级特性 物理存储 磁盘存储特性 如零拷贝、页缓存、mmp、sendfile
78 3
|
4月前
|
存储 Java API
【Azure 存储服务】存储在Azure Storage Table中的数据,如何按照条件进行删除呢?
【Azure 存储服务】存储在Azure Storage Table中的数据,如何按照条件进行删除呢?
|
存储 弹性计算 数据挖掘
《阿里云存储手册》——云定义存储CDS
《阿里云存储手册》——云定义存储CDS
449 0
|
存储 消息中间件 缓存
【存储架构】使用Apache Pulsar分层存储省钱
【存储架构】使用Apache Pulsar分层存储省钱
|
存储 数据采集 监控
摸鱼不如来了解一下--操作数据存储(ODS)和数据仓库(DW)的区别与联系
操作数据存储(ODS)和数据仓库(DW)的区别与联系
605 0
|
存储 移动开发 资源调度
一分钟实现,一个RN持久数据管理器
一分钟实现,一个RN持久数据管理器
923 0
|
存储 Perl 调度
从零开始入门 K8s | 应用存储和持久化数据卷:存储快照与拓扑调度
作者 | 至天 阿里巴巴高级研发工程师 一、基本知识 存储快照产生背景 在使用存储时,为了提高数据操作的容错性,我们通常有需要对线上数据进行 snapshot ,以及能快速 restore 的能力。另外,当需要对线上数据进行快速的复制以及迁移等动作,如进行环境的复制、数据开发等功能时,都可以通过存储快照来满足需求,而 K8s 中通过 CSI Snapshotter controller 来实现存储快照的功能。