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

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

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

可以看出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’;
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的实现原理,那你可以看看这篇文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 React Native 中实现数据表格的思路与在普通的 Web 应用中类似,都是需要使用数据渲染表格。下面是一个简单的实现步骤: 1. 通过请求获取需要展示的数据,将数据存储在状态变量中。 2. 根据数据渲染表格的头部,可以使用 `View` 和 `Text` 组件来实现。 3. 根据数据渲染表格的内容。可以使用数组的 `map` 方法遍历数据,使用 `View` 和 `Text` 组件来展示每一行数据。 4. 可以对表格的头部和内容进行样式的调整,例如设置表格的宽度、字体大小和颜色等。 下面是一个简单的代码示例,实现一个包含表格头部和内容的数据表格: ```jsx import React, { useState, useEffect } from 'react'; import { View, Text, StyleSheet } from 'react-native'; function DataTable() { const [data, setData] = useState([]); useEffect(() => { // 发送请求获取数据 fetch('https://example.com/data') .then(response => response.json()) .then(data => setData(data)) .catch(error => console.error(error)); }, []); return ( <View style={styles.table}> <View style={styles.header}> <Text style={styles.headerText}>Name</Text> <Text style={styles.headerText}>Age</Text> <Text style={styles.headerText}>Gender</Text> </View> {data.map(item => ( <View style={styles.row} key={item.id}> <Text style={styles.text}>{item.name}</Text> <Text style={styles.text}>{item.age}</Text> <Text style={styles.text}>{item.gender}</Text> </View> ))} </View> ); } const styles = StyleSheet.create({ table: { borderWidth: 1, borderColor: '#ccc', margin: 10, }, header: { flexDirection: 'row', backgroundColor: '#eee', padding: 10, }, headerText: { fontWeight: 'bold', flex: 1, textAlign: 'center', }, row: { flexDirection: 'row', borderBottomWidth: 1, borderBottomColor: '#ccc', padding: 10, }, text: { flex: 1, textAlign: 'center', }, }); ``` 在这个代码示例中,我们通过 `fetch` 发送请求获取数据,并将数据存储在状态变量 `data` 中。在组件的返回值中,我们先展示了表格的头部,使用 `View` 和 `Text` 组件来实现。然后我们使用数组的 `map` 方法遍历数据,使用 `View` 和 `Text` 组件来展示每一行数据。我们还对表格的头部和内容进行了样式的调整,例如设置了表格的宽度、字体大小和颜色等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值