react native 的数据存储有很多种方式,本来我选择的是 AsyncStorage,但是不知道为什么无法删除里面的数据,这样就无法进行登录注销。最后来回试了几个,选择了 react-native 已经封装好AsyncStorage的一款:react-native-storage
github地址:https://github.com/sunnylqm/react-native-storage/blob/master/README-CHN.md
这是一个本地持久存储的封装,可以同时支持 AsyncStorage 和 localStorage。不过我写 react 时,直接用的localStorage,未进行封装。
使用步骤:
1、安装:
npm install react-native-storage --save
2、导入:
import Storage from 'react-native-storage';
不要使用 require 语法导入。
3、初始化
因为我主要存储登录状态,所以需要全局存储。
import Storage from 'react-native-storage';
var storage = new Storage({ // 初始化
size:1000,
storageBackend: AsyncStorage,
defaultExpires: null,
enableCache:true,
});
global.storage = storage;//全局化
初始化时其实还有一个异步默认的方法,但是我这里不需要这个,所以我就没有进行设定。
这样全局化之后,我在任何地方,用storage就可以取到它并对它进行操作。
4、保存
var userName = e.username;
var userKey = e.key;
storage.save({
key:'loginState’, // 相当于起了一个名字
rawData: {
userName:userName,
userKey:userKey,
},
});
5、读取
storage.load({
key:'loginState',
}).then(ret => { // ret中有值时返回
this.setState({
userName:ret.userName,
userKey:ret.userKey,
});
}).catch(err => { // ret中无值或异常时跳到登录界面
this.props.nav.push({
title:'Login',
id:'login',
});
});
6、删除
storage.remove({
key:'loginState’, //删除loginState
});
当然还有好几种删除方法,可在github上找,我这里只对这种进行了验证。
也有异步加载以及批量数据的读取,但我都还未涉及。