一分钟实现,一个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

目录
相关文章
|
8月前
|
存储 应用服务中间件 nginx
k8s--数据存储、EmptyDir存储
k8s--数据存储、EmptyDir存储
|
11月前
|
存储 消息中间件 缓存
【存储架构】使用Apache Pulsar分层存储省钱
【存储架构】使用Apache Pulsar分层存储省钱
|
存储 数据采集 监控
摸鱼不如来了解一下--操作数据存储(ODS)和数据仓库(DW)的区别与联系
操作数据存储(ODS)和数据仓库(DW)的区别与联系
478 0
|
存储 OLAP 数据库
【DBMS 数据库管理系统】OLAP 核心技术 : 数据方体 ( 数据方体 | 数据方体格结构 | 数据单元 )
【DBMS 数据库管理系统】OLAP 核心技术 : 数据方体 ( 数据方体 | 数据方体格结构 | 数据单元 )
186 0
|
存储 数据库
SAP CRM数据库表COMM_PR_FRG_ROD的存储逻辑
SAP CRM数据库表COMM_PR_FRG_ROD的存储逻辑
126 0
SAP CRM数据库表COMM_PR_FRG_ROD的存储逻辑
|
存储 弹性计算 运维
云Clickhouse冷热数据分层存储
基于云ClickHouse可以给电商、游戏、互联网以及其他行业提供高性能、高稳定性、低维护成本、高性价比的实时数据分析、精准营销、业务运营、业务分析、业务预警、业务营销、数仓加速等场景化方案,本实践会向客户提供数据库低维护成本、数据库链路构建、冷热分层存储、快熟分析等操作实践。
云Clickhouse冷热数据分层存储
|
存储 云安全 安全
阿里云开启超 TB 级复杂数据场景机密计算
基于机密计算技术的SaaS产品,DataTrust隐私增强计算平台正式发布。
1174 0
阿里云开启超 TB 级复杂数据场景机密计算
|
存储 移动开发 资源调度
一分钟实现,一个RN持久数据管理器
一分钟实现,一个RN持久数据管理器
872 0
|
存储 机器学习/深度学习 人工智能
|
存储 前端开发 API
新一代的前端存储方案--indexedDB
我们都知道在前端开发当中,有时会因为某些需求,要将一些数据存储在前端本地当中.比如说:为了优化性能,将一些常用的数据存在本地,这样以后需要的时候直接从本地拿,不需要再向后端进行请求.还有就是为了防止CSRF攻击,后端给前端一个token,前端就需要将这个token存在本地.
2064 0