如果现在有一个需求,是要把用户的账号密码保存到本地,大家会怎么做的呢?如果在android中,我相信一大部分人会想到SharedPreferences,这是一个以键值对的形式进行存储的。那如果在react native中呢,有没有一个像SharedPreferences一样的轻量存储器呢?答案是有的---AsyncStorage。
AsyncStorage是一个简单的、异步的、持久化的Key-Value存储系统,它对于App来说是全局性的。这是官网上对它的介绍。可以知道,这个asyncstorage也是以键值对的形式进行存储数据的。
那么问题来了,该怎么使用这个呢?官网上说并不推荐我们直接用这个asyncstorage,而是进行抽象封装以后在进行调用。首先看一看我在项目中的用法。
上代码:
1 import React, { 2 AsyncStorage 3 }from 'react-native'; 4 5 class DeviceStorage { 6 /** 7 * 获取 8 * @param key 9 * @returns {Promise<T>|*|Promise.<TResult>} 10 */ 11 12 static get(key) { 13 return AsyncStorage.getItem(key).then((value) => { 14 const jsonValue = JSON.parse(value); 15 return jsonValue; 16 }); 17 } 18 19 20 /** 21 * 保存 22 * @param key 23 * @param value 24 * @returns {*} 25 */ 26 static save(key, value) { 27 return AsyncStorage.setItem(key, JSON.stringify(value)); 28 } 29 30 31 /** 32 * 更新 33 * @param key 34 * @param value 35 * @returns {Promise<T>|Promise.<TResult>} 36 */ 37 static update(key, value) { 38 return DeviceStorage.get(key).then((item) => { 39 value = typeof value === 'string' ? value : Object.assign({}, item, value); 40 return AsyncStorage.setItem(key, JSON.stringify(value)); 41 }); 42 } 43 44 45 /** 46 * 更新 47 * @param key 48 * @returns {*} 49 */ 50 static delete(key) { 51 return AsyncStorage.removeItem(key); 52 } 53 } 54 55 export default DeviceStorage;
可以看到asyncstorage中存在有更删改查这些方法,当然,上面是把asyncstorage进行了封装,在其他地方调用的时候就可以作为一个工具进行调用了。
调用方式:
1 //appHotSearchTagList就是当时保存的时候所保存的key,而tags就是保存的值 2 3 Storage.get('appHotSearchTagList').then((tags) => { 4 this.setState({ 5 tags: tags 6 }) 7 });
这里我只是贴出了一种获取数据的方式,其实另外的更新,删除,保存,方式都是差不多。