如果现在有一个需求,是要把用户的账号密码保存到本地,大家会怎么做的呢?如果在android中,我相信一大部分人会想到SharedPreferences,这是一个以键值对的形式进行存储的。那如果在react native中呢,有没有一个像SharedPreferences一样的轻量存储器呢?答案是有的---AsyncStorage。
AsyncStorage是一个简单的、异步的、持久化的Key-Value存储系统,它对于App来说是全局性的。这是官网上对它的介绍。可以知道,这个asyncstorage也是以键值对的形式进行存储数据的。
那么问题来了,该怎么使用这个呢?官网上说并不推荐我们直接用这个asyncstorage,而是进行抽象封装以后在进行调用。首先看一看我在项目中的用法。
代码如下:
/**
* AsyncStorage异步、持久化的key-value存储系统
*/
import { AsyncStorage } from 'react-native';
class StorageUtils {
/**
* 根据key获取json数据
*/
static get(key) {
return AsyncStorage.getItem(key)
.then(value => {
if (value && value !== '') {
const jsonValue = JSON.parse(value);
return jsonValue;
}
return null;
})
.catch(() => null);
}
/**
* 保存key对应的json数值
* @param key
* @param value
*/
static save(key, value) {
return AsyncStorage.setItem(key, JSON.stringify(value));
}
/**
* 更新key对应的json数值
* @param key
* @param value
* @returns {*}
*/
static update(key, value) {
return AsyncStorage.get(key)
.then(item => {
value = typeof value === 'string' ? value : Object.assign({}, item, value);
return AsyncStorage.setItem(key, JSON.stringify(value));
});
}
/**
* 删除key对应的json数值
* @param key
* @returns {SVGLength | void | string | SVGTransform | SVGPathSeg | SVGNumber | DOMPoint}
*/
static deleteItem(key) {
return AsyncStorage.removeItem(key);
}
/**
* 清空所有数据
*/
static clear(){
return AsyncStorage.clear();
}
}
export default StorageUtils;