在React Native开发过程当中,总避免不了须要存储一些数据在本地。对于大多数应用只须要存储一些结构简单的数据,如标记位,用户信息等。这时候咱们首选择的存储方式就是AsyncStorage,那咱们先来看下AsyncStorage给我提供了哪些基本方法:react
能够看出AsyncStorage已经包含set、get、remove、clear等一系列静态方法,基本上已经知足了咱们对数据增、删、改、查(CURD 下文中我都统一使用简称)的需求。对于AsyncStorage的使用,官网建议咱们再封装一层,而不是直接使用AsyncStorage。git
那咱们先在网上搜索一下看看你们是怎么封装AsyncStorage的。经过在网上大量的搜索与对比,我把你们的封装方式分为三类:github
-
重复造轮式 这种封装方式,基本上是新建一个可导出的类,加入几个静态的CURD方法,而后在相应的静态方法里面直接调用AsyncStorage的CURD方法,其它的不作任何处理。【这种‘‘简陋’’的封装,还不如不封装】sql
-
类型转换式 这种封装方式,相较于重复造轮式,增长了类型转换和异常捕获,使得 AsyncStorage的数据存的类型再也不局限于string,能够保存对象、数组等结构数据类型,对于取数据的时候也作相应的转换【基本知足开发需求,但使用不够简单】数据库
-
过分封装式 这种封装方式,给AsyncStorage的操做增长了不少附加的存、取可选项,经如增长Where条件查询,保存,这种表面上看着封装以后对AsyncStorage的操做变得更“灵活”,功能“更强大”,实则很鸡肋。【画蛇添足,为什么不选择 sqlite 库】npm
虽然AsyncStorage的底层是sqlite db实现的,并非表示咱们就得让AsyncStorage支持sqlite的各类标准的数据库操做,AsyncStorage被设计出来的初衷就是用于存取一些结构相对简单的数据,若是真要操做大量、复杂的数据那就应该选择RN的 sqlite库去实现。react-native
经过以上这几类方式的对比,发现第二种AsyncStorage封装方式的是比较合适的。在使用过程当中基本也是以Key-Value的形式是存、取数据。可是若是项目中有大量的数据存、取操做时。这个Keys的维护是一个难题:数组
-
在访问AsyncStorage的地方,手动写key,如:XXX.get('userId'),这种方式缺点也很明显,若是有大量地同一属性的操做,得写不少遍,所以也增长了写错的可能性,Coding体验很是很差。app
-
定义属性常量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的属性字段对数据的类型有 string,bool,object 等各类类型的支持。总之一句话:您能够像访问内存对象同样同步访问RNStorage里面定义的任何属性,这些属性会被自动同步到AsyncStorage中。
示例项目:react-native-easy-app-sample 中的 StorageController 页面包含RNStorage的数据存、取的应用实现,你们能够参考。
这样文章开头AsyncStorage的第二种封装方式的访问问题就迎刃而解了,或许你还不放心,也不懂RNStorage的实现原理,那你能够看看这篇文章:
react-native-easy-app 详解与使用之(一) AsyncStorage
若是有任何疑问,欢迎扫码加入RN技术QQ交流群