微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

react native学习笔记16——存储篇1AsyncStorage

前言

React Native中常用的数据本地化存储的方法有如下几种:

  • AsyncStorage:以键值对的形式存储的轻量存储器,只能存储字符串数据。
  • sqlite:一种轻型的数据库,多用于移动端开发,原生应用开发中比较常见。
  • Realm:新兴的移动端数据存储方法,使用简单、跨平台、性能优越功能强大。

本文主要主要介绍第一种——AsyncStorage。

AsyncStorage介绍

AsyncStorage是react native提供的轻量存储器,类似Android中的SharePreference, iOS中的NSUserDefault,以键值对的形式存储将信息存储在本地,它是一个简单的、未加密的、异步的、持久化的Key-Value 存储系统,对于App来说是全局性的。官方建议使用时在AsyncStorage的基础上做一层抽象封装,而不是直接使用AsyncStorage。
AsyncStorage的JS代码是对原生实现的一个简易封装,提供一个更清晰的JS API、返回真正的错误对象,以及简单的单项对象操作函数。每个方法都会返回一个Promise对象。

下面是使用AsyncStorage存储数据、获取数据的简单示例。
存储数据:

try {
  await AsyncStorage.setItem('samplekey','lalala.');
} catch (error) {
  // Error saving data
}

获取数据:

try {
  const value = await AsyncStorage.getItem('samplekey');
  if (value !== null){
    // We have data!!
    console.log(value);
  }
} catch (error) {
  // Error retrieving data
}

常用的方法

  1. 获取键所对应的值:static getItem(key: string,callback:(error,result))
    根据键来获取值,获取的结果会放在回调函数中。

  2. 设置键-值对:static setItem(key: string,value: string,callback:(error))
    根据键来设置值。

  3. 移除键-值对:static removeItem(key: string,callback:(error))
    根据键来移除项。

  4. 合并键-值对:static mergeItem(key: string,callback:(error))
    合并现有值和输入值。

  5. 清除所有的数据:static clear(callback:(error))
    清除所有的内容

  6. 获取所有的键:static getAllKeys(callback:(error,keys))
    获取所有的键。

  7. 清除进行中的查询操作:static flushGetRequests()
    清除所有进行中的查询操作。

  8. 获取多个键对应的值:static multiGet(keys,callback:(errors,result))
    获取多项,其中 keys 是字符串数组,比如:['k1','k2']

  9. 设置多项键-值对:static multiSet(keyvaluePairs,callback:(errors))
    设置多项,其中 keyvaluePairs 是字符串的二维数组,比如:[['k1','val1'],['k2','val2']]

  10. 删除多项键-值对static multiRemove(keys,callback:(errors))
    删除多项,其中 keys 是字符串数组,比如:['k1','k2']

  11. 合并多项键-值对static multiMerge(keyvaluePairs,callback:(errors))
    多个键值合并,其中 keyvaluePairs 是字符串的二维数组,比如:[['k1','val2']]

使用实例

下面示例中主要通过 AsyncStorage.getItemAsyncStorage.setItemAsyncStorage.removeItem实现AsyncStorage的增删查,如果对同一个key用setItem设置不同的值,后一次设置的值会覆盖前一次的值,以此来实现对数据的修改更新。

import React,{ Component } from 'react';
import {
    StyleSheet,View,Text,Dimensions,Button,AsyncStorage
} from 'react-native';

const {width,height} = Dimensions.get('window');
var data = "";
const AsyncStorageKey = "ASE_";
export default class AsyncStorageExample extends Component {

    constructor(props) {
        super(props);
        this.state = {
            data:""
        };
    }

    setData(text){
        AsyncStorage.setItem(AsyncStorageKey,text,()=>{
            this.setState({
                data:text,});
        });
    }

    delData(){
        AsyncStorage.getItem(AsyncStorageKey,(error,text)=>{
            if(text=== null ){
                alert(AsyncStorageKey +"没有对应的值");
            }else{
                //移除键-值对
                AsyncStorage.removeItem(AsyncStorageKey,()=>{
                    this.setState({
                        data:"",},()=>{
                        alert('删除成功');
                    });
                });
            }
        });
    }

    render() {
        return (
            <View style={styles.container}> <Button onPress={this.setData.bind(this,"我用 AsyncStorage存了一条信息")} style={styles.itemView} title="存储数据"> </Button> <Button onPress={this.delData.bind(this)} style={styles.itemView} title="删除数据" > </Button> <Text style={{paddingTop:40}}> AsyncStorage存储的值是: </Text> <Text> {this.state.data} </Text> </View> ); } } const styles = StyleSheet.create({ container: { flex: 1,backgroundColor: '#f2f2f2',paddingTop:20,itemView:{ backgroundColor:'grey',height:44,width:width,justifyContent:'center',marginTop:10,itemText:{ fontSize:15,color:'#ffffff',textAlign:'left',marginLeft:20,});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...