1. 如何将数据存储到本地?

数据存储是开发APP必不可少的一部分,比如页面缓存,从网络上获取数据的本地持久化等,那么在RN中如何进行数据存储呢?

RN官方推荐我们在RN中使用AsyncStorage进行数据存储

2. 什么是AsyncStorage?

2.1 特点

  • 简单的,异步的,持久化的key-value存储系统
  • AsyncStorage也是React Native官方推荐的数据存储方式,旨在代替LocalStorage

2.2 AsyncStorage在ios中存储的两种情况

  • 如果存储的内容较小,那么AsyncStorage会将存储的内容放在一个序列化的字典
  • 如果存储的内容较大,那么AsyncStorage会将存储的内容放在一个单独的文件

2.3 AsyncStorage在android中存储也分为两种情况:

  • AsyncStorage会将数据存储在RocksDB或者SQLite中,具体存在RocksDB中还是SQLite中这取决于设备支持哪一种存储方式。

3. 如何使用AsyncStorage?

 

首先导入AsyncStorage作为RN一个标准组件使用

import AsyncStorage from '@react-native-community/async-storage';
//import { AsyncStorage } from 'react-native';

在最新的react-native版本中已经将AsyncStorage分离出去了,然后在android上需要手动link一下,具体参照我写的一篇关于link的文章点击查看手动link教程

 

3.1 存储数据

 /**
* 存储数据
*
* @memberof AsyncStorageDemoPage
*/
async doSave() {
// 用法一
AsyncStorage.setItem(KEY, this.value, err => {
err && console.log(err.toString());
}) // 用法二
AsyncStorage.setItem(KEY, this.value)
.catch(err => {
err && console.log(err.toString());
})
// 用法三
try {
await AsyncStorage.setItem(KEY, this.value)
} catch (err) {
err && console.log(err.toString());
}
}

3.2 获取数据

 /**
* 获取数据
*
* @memberof AsyncStorageDemoPage
*/
async getData() {
// 用法一
AsyncStorage.getItem(KEY, (err, value) => {
this.setState({
showText: value
});
console.log(value);
err && console.log(err.toString());
})
// 用法二
AsyncStorage.getItem(KEY)
.then(value => {
this.setState({
showText: value
})
})
.catch(err => {
err && console.log(err.toString());
})
// 用法三
try {
const value = AsyncStorage.getItem(KEY);
this.setState({
showText: value
});
} catch (err) {
err && console.log(err.toString());
}
}

3.3 移除数据

/**
* 移除数据
*
* @memberof AsyncStorageDemoPage
*/
async doRemove() {
// 用法一
AsyncStorage.removeItem(KEY, err => {
err && console.log(err.toString());
})
// 用法二
AsyncStorage.removeItem(KEY)
.catch(err => {
err && console.log(err.toString());
})
// 用法三
try {
await AsyncStorage.removeItem(KEY);
} catch(err) {
err && console.log(err.toString());
}
}

3.4 AsyncSorage常用API

点击进入查看官方文档

最新文章

  1. MVVM页面跳转 技巧性标记
  2. DB2死锁的解决办法
  3. JAVA通过md5方法进行加密
  4. 关于Java中return和finally谁先执行.
  5. What does enumerable mean?
  6. BZOJ 1012 最大数
  7. 产生n不同随机数的算法
  8. niceScroll接口大全
  9. ASP.NET Core 菜鸟之路:从Startup.cs说起
  10. JavaScript+svg绘制的一个动态时钟
  11. 201521123066 《Java程序设计》第九周学习总结
  12. C++数组做参数
  13. 基于JDK1.8的HashMap分析
  14. alpha-咸鱼冲刺day9
  15. 关于<服务器>定义
  16. java之xml解析-dom4j
  17. 解决插值表达式闪烁问题 - v-cloak
  18. JsonDataObjects 简单实用
  19. delphi2010 域名转换IP
  20. ifream框架角色切换

热门文章

  1. php中的几个常用的魔术常量
  2. Linux/Unix 下自制番茄钟
  3. 平铺式窗口管理器 Musca 初体验
  4. HDU 2062 Subset sequence (找规律)
  5. vtk 基础概念
  6. 浅析XSS与XSSI异同
  7. SDL封装的系统操作(转载)
  8. python(13)多线程:线程池,threading
  9. shell脚本实现监控shell脚本的执行流程及变量的值
  10. aarch64_l2