一分钟实现,一个RN持久数据管理器
在React Native开发过程中,总避免不了需要存储一些数据在本地。对于大多数应用只需要存储一些结构简单的数据,如标记位,用户信息等。这时候我们首选择的存储方式就是AsyncStorage,那我们先来看下AsyncStorage给我提供了哪些基本方法:
可以看出AsyncStorage已经包含set、get、remove、clear等一系列静态方法,基本上已经满足了我们对数据增、删、改、查(CURD 下文中我都统一使用简称)的需求。对于AsyncStorage的使用,官网建议我们再封装一层,而不是直接使用AsyncStorage。
那我们先在网上搜索一下看看大家是怎么封装AsyncStorage的。通过在网上大量的搜索与对比,我把大家的封装方式分为三类:
- 重复造轮式
这种封装方式,基本上是新建一个可导出的类,加入几个静态的CURD方法,然后在相应的静态方法里面直接调用AsyncStorage的CURD方法,其它的不做任何处理。【这种‘‘简陋’’的封装,还不如不封装】 - 类型转换式
这种封装方式,相较于重复造轮式,增加了类型转换和异常捕获,使得AsyncStorage的数据存的类型不再局限于string,可以保存对象、数组等结构数据类型,对于取数据的时候也做相应的转换【基本满足开发需求,但使用不够简单】 - 过度封装式
这种封装方式,给AsyncStorage的操作增加了很多附加的存、取可选项,比如增加Where条件查询,保存,这种表面上看着封装之后对AsyncStorage的操作变得更“灵活”,功能“更强大”,实则很鸡肋。【多此一举,为何不选择 sqlite 库】
虽然AsyncStorage的底层是sqlite db实现的,并不是表示我们就得让AsyncStorage支持sqlite的各种标准的数据库操作,AsyncStorage被设计出来的初衷就是用于存取一些结构相对简单的数据,如果真要操作大量、复杂的数据那就应该选择RN的 sqlite库去实现。
通过以上这几类方式的对比,发现第二种AsyncStorage封装方式的是比较合适的。在使用过程中基本也是以Key-Value的形式是存、取数据。但是如果项目中有大量的数据存、取操作时。这个Keys的维护是一个难题:
- 在访问AsyncStorage的地方,手动写key,如:XXX.get('userId'),这种方式缺点也很明显,如果有大量地同一属性的操作,得写很多遍,因此也增加了写错的可能性,Coding体验非常不好。
- 定义属性常量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'; XStorage.initStorage(RNStorage, () => { // 绑定完成,现在您就可以随意访问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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云发布云原生容器安全解决方案,为客户提供无缝安全体验
6月9日,在阿里云线上峰会,容器安全解决方案重磅发布,致力于帮助客户应对日渐凸显的容器安全挑战。 容器成为云计算主流形态已经是一个必然的趋势,但容器计算给企业带来便利的同时也对安全提出了新的要求和挑战,这也成为阻碍很多企业大规模采用容器计算的一个关键因素。 据相关调研发现,超过一半的企业将安全隐患视为采用容器计算的最大担忧,94%的企业都经历过容器安全事件。 容器计算三大安全挑战 首先,容器计算推动着整个云基础设施架构的改变,企业使用容器之后,不再需要关注底层的IaaS层,而是主要着眼于上面的PaaS层,甚至是SaaS应用层。相对应的,企业安全架构和能力也对应上移,更加着重在PaaS和SaaS层的安全能力建设; 其次,企业安全建设除了“上移”之外,还需要“左移”。传统情况下安全一般都是业务应用上线之后才开始介入,但随着容器的采用,整个应用的开发上线运维模式也发生了很大的变化,要求安全在应用的开发阶段就开始介入,即安全在整个应用生命周期的“左移”,这就会导致开发安全运营一体化(DevSecOps)成为刚需; 第三,企业采用容器计算的主要驱动力是业务应用的高速变化和开发迭代,应用的敏捷式开...
- 下一篇
二十分钟封装,一个App前后台Http交互的实现
在React Native开发过程中,几乎所有的app都需要使用到Http请求,所以fetch的封装必不可少,由于不同app的请求参数,解析规则,token机制等完全不一样,所以在大多数App开发中,前后台Http请求的实现都是开发者自己封装的。 封装一个前后台Http请求实现需要多久? 可能有人回答是1小时,也有3、5小时甚至更长时间的,或者也有说先这样封装个大概,等到需求不满足的时候再改。 花费1小时的时间不一定短,花费3、5的时间也不一定算长,具体要看前后台交互的复杂程度与开发者对交互实现的封装程度。 那这里我们就引出了一个问题了,我们通常说的app的Http请求【封装】,到底封装的是什么,我们需要做哪些工作,能使用得app的接口请求更简单,易用且有较高的灵活性?在我看来这个“封装”主要分两个部分: 数据交换 层面的封装,即: 实现前后台的互通,支持服务器要求的数据交换类型、格式等 调用者可以自由设置请求的header、params等参数,程序根据不同的设置也能保证请求能正确的发送给服务端并返回相应的结果 支持超时、日志打印等一些基本功能 业务逻辑 层面的封装,即: 入参:公共部...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装