一分钟实现,一个RN持久数据管理器-阿里云开发者社区

开发者社区> rufeng008> 正文

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

简介: 一分钟实现,一个RN持久数据管理器
+关注继续查看

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

AsyncStorage_methods.png

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

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

  1. 重复造轮式
    这种封装方式,基本上是新建一个可导出的类,加入几个静态的CURD方法,然后在相应的静态方法里面直接调用AsyncStorage的CURD方法,其它的不做任何处理。【这种‘‘简陋’’的封装,还不如不封装
  2. 类型转换式
    这种封装方式,相较于重复造轮式,增加了类型转换和异常捕获,使得

AsyncStorage的数据存的类型不再局限于string,可以保存对象、数组等结构数据类型,对于取数据的时候也做相应的转换【基本满足开发需求,但使用不够简单

  1. 过度封装式
    这种封装方式,给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 秒钟定义一个全局可导出的数据管理对象及需要存储的相应属性,如:

export const RNStorage = {// RNStorage 自定义数据存储对象
       token: undefined, //  字符串类型
       isShow: undefined, // 布尔类型
       userInfo: undefined, // 对象类型
   };

第二步:
再花 20 秒的时间,在程序初始化的地方引入XStorage,并调用初始化绑定RNStroage与AsyncStorage,然后你就可以在任何地方对RNStorage中字义的变量进行【取值】、【赋值】操作了,相应的属性值,会被自动同步持久化到AsyncStorage中。

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

  XStorage.initStorage(RNStorage, AsyncStorage, () => {
  // 当自定义对象 RNStorage 被初始化完成之后,就可以对其任何属性进行取值、赋值操作;
  // 对RNStorage 属性的取、赋值操作会被自动映射成 AsyncStorage 的getItem与setItem方法;
             
 console.log(RNStorage.isShow);
 // 相当于 [ console.log(await AsyncStorage.getItem('isShow')) ] 
 
 RNStorage.token = 'TOKEN1343DN23IDD3PJ2DBF3==';
 // 相当于 [ await AsyncStorage.setItem('token',TOKEN1343DN23IDD3PJ2DBF3==') ] 
 
 RNStorage.userInfo = {name: 'rufeng', age: 30};
 // 相当于 [ await AsyncStorage.setItem('userInfo',JSON.stringify({ name:'rufeng', age:30})) ] 
  });

第三步:

  • 再花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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《1分钟 Serverless 极速部署经典小游戏》活动规则说明
Serverless 在真实场景中如何发挥“降本增效”优势? 12月23日至12月31日期间,依次通过 3个挑战任务,即可免费领取阿里云定额代金券及阿里云定制版 Linux 命令鼠标垫。(同一用户的不同账号限领一次,每日限量111个,10点补仓,先到先得)
509 0
hostPath Volume - 每天5分钟玩转 Docker 容器技术(148)
hostPath Volume 将 Docker Host 文件系统的目录 mount 到 Pod 的容器。
1583 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 28 章 监控数据库活动_28.3. 查看锁
28.3. 查看锁 监控数据库活动的另外一个有用的工具是pg_locks系统表。这样就允许数据库管理员查看在锁管理器里面未解决的锁的信息。例如,这个功能可以被用于: 查看当前所有未解决的锁、在一个特定数据库中的关系上所有的锁、在一个特定关系上所有的锁,或者由一个特定PostgreSQL会话持有的所有的锁。
962 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 28 章 监控数据库活动
第 28 章 监控数据库活动 目录 28.1. 标准 Unix 工具 28.2. 统计收集器 28.2.1. 统计收集配置 28.2.2. 查看统计信息 28.2.3. 统计函数 28.3. 查看锁 28.4. 进度报告 28.4.1. VACUUM进度报告 28.5. 动态追踪 28.5.1. 动态追踪的编译 28.5.2. 内建探针 28.5.3. 使用探针 28.5.4. 定义新探针 一个数据库管理员常常会疑惑,“系统现在正在做什么?”这一章会讨论如何搞清楚这个问题。
963 0
一分钟了解阿里云产品:数据传输
一、             概述   阿里云发布了很多产品,今天让我们一起来了解下数据传输(Data Transmission) 吧。   什么是数据传输呢?   阿里云数据传输支持以数据库为核心的结构化存储产品之间的数据传输。 它是一种集数据迁移、数据订阅及数据实时同步于一体的数
3372 0
怎样在Sql server2008客户端管理器修改多于200行的数据
版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/8778356 在修改数据时,当数据记录的行数大于200行时,对表内容进行修改操作,当我用鼠标右键点击表时,出现: 然而,并没有我想要的编辑200行后的数据。
524 0
编程实战——电影管理器之XML存储电影信息数据
但凡管理器之类的软件,存储数据是必不可少的。存储数据的话,有几种选择。一是用数据库,把数据存储到数据库里;一是用文本文件,把数据存储到文本文件里;一种是利用XML文件,把数据对象转换为XML后,存储到XML文件(实际上也是文本文件)。
723 0
+关注
12
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载