zoukankan      html  css  js  c++  java
  • ReactNative: 使用AsyncStorage异步存储类

    一、简介

    AsyncStorage是一个简单的具有异步特性可持久化的键值对key-value的存储系统。它对整个APP而言,是一个全局的存储空间,可以用来替代H5中提供的window属性LocalStorage。AsyncStorage跟iOS中的偏好设置NSUserDefault很类似,也是通过plist列表实现存储。AsyncStorage和LocalStorage的用法基本相同。这里对LocalStorage的介绍简单地一笔带过,基本使用如下:

    //获取localStorage
    var storage = window.localStorage;
    
    //使用 localStorage.setItem() 向其添加数据项
    storage('name', 'XYQ');
    
    //读取 localStorage 项目
    var name = storage.getItem("name");
    
    //删除 localStorage 项目
    storage.removeItem("name");

    二、API

    AsyncStorage提供的函数或方法比较齐全,每一个方法都有一个回调函数。函数的第一个参数都是错误对象,如果发生错误,里面会包裹着错误信息,否则返回空值null。所有的方法执行后,都会返回一个Promise对象,这个对象是ES6中的新特性函数,即ES6 Promise异步构造函数具体的方法如下所示:

    //根据键名获取键值,获得结果会在回调函数中
    getItem: function(
        key: string,
        callback?: ?(error: ?Error, result: ?string) => void
      ):Promise{}
    
    //设置键值对
     setItem: function(
        key: string,
        value: string,
        callback?: ?(error: ?Error) => void
      ):Promise{}
    
    //移除键值对
     removeItem: function(
        key: string,
        callback?: ?(error: ?Error) => void
      ): Promise{}
    
    //合并键值对
    mergeItem: function(
        key: string,
        value: string,
        callback?: ?(error: ?Error) => void
      ): Promise{}
    
    //清除所有键值对
    clear: function(callback?: ?(error: ?Error) => void
    ): Promise{}
    
    //获取所有键名
      getAllKeys: function(callback?: ?(error: ?Error, keys: ?Array<string>) => void
    ): Promise{}
    
    //获取多项键值对,其中keys是字符串数组
    multiGet: function(
        keys: Array<string>,
        callback?: ?(errors: ?Array<Error>, result: ?Array<Array<string>>) => void
      ): Promise{}
    
    //设置多项键值对,其中keyValuesParis是字符串二维数组
    multiSet: function(
        keyValuePairs: Array<Array<string>>,
        callback?: ?(errors: ?Array<Error>) => void
      ): Promise{}
    
    //移除多项键值对,其中keys是字符串数组
    multiRemove: function(
        keys: Array<string>,
        callback?: ?(errors: ?Array<Error>) => void
      ): Promise{}
    
    //合并多项键值对,其中keyValuesParis是字符串二维数组
     multiMerge: function(
        keyValuePairs: Array<Array<string>>,
        callback?: ?(errors: ?Array<Error>) => void
      ): Promise{}

    三、使用

    实现文件:

    /**
     * Sample React Native App
     * https://github.com/facebook/react-native
     * @flow
     */
    
    import React, { Component } from 'react';
    
    import {
        AppRegistry,
        StyleSheet,
        View,
        AsyncStorage
    } from 'react-native';
    
    export default class ReactNativeDemo extends Component {
    
        constructor(props){
            super(props);
    
            //设置键值对
            AsyncStorage.setItem("name","XYQ", null);
            AsyncStorage.setItem("gender","male", null);
            AsyncStorage.setItem("age","20",function (error) {
                if (error) console.log(`--${error}--`)
            });
    
            //取出键值对
           AsyncStorage.getItem("name",function (error, result) {
                if (error) console.log(`--${error}--`)
                console.log(`result is ${result}`)
            });
    
            //取出所有的键名
            AsyncStorage.getAllKeys(function (error, keys) {
                keys.map((keyName, i) => {
                    key=1;
                    console.log(`key is ${keyName}`)
                });
            });
        }
    
        render() {
            return (
                <View style={styles.flex}>
                </View>
            );
        }
    }
    
    
    const styles = StyleSheet.create({
        flex: {
            flex: 1
        }
    });
    
    AppRegistry.registerComponent('ReactNativeDemo', () => ReactNativeDemo);

    结果如下:

    2019-12-16 16:44:35.771 [info][tid:com.facebook.react.JavaScript] result is XYQ
    2019-12-16 16:44:35.771 [info][tid:com.facebook.react.JavaScript] key is name
    2019-12-16 16:44:35.772 [info][tid:com.facebook.react.JavaScript] key is age
    2019-12-16 16:44:35.772 [info][tid:com.facebook.react.JavaScript] key is gender

     

  • 相关阅读:
    Ext.Msg.alert要注意的问题
    项目终于到了可以轻松下的时候,^_^
    Ext最佳应用
    Google居然无视中国人民的感情
    google的logo居然还是鲜艳色的!!!(下午已经是黑的了,还是感谢google)
    我们必须支持国产,这是义务
    管理软件更需要Open Social
    设计模式外观模式(Facade)
    设计模式代理模式(Proxy)
    设计模式桥接模式(Bridge)
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/12049758.html
Copyright © 2011-2022 走看看