数据存储是开发APP必不可少的一部分,比如页面缓存,从网络上获取数据的本地持久化等,那么在RN中如何进行数据存储呢?

RN官方推荐我们在RN中用AsyncStorage进行数据存储。

什么是AsyncStorage?

简单的,异步的,持久化的key-value存储系统
AsyncStorage也是Rect Native官方推荐的数据存储方式,旨在代替LocalStorage
AsyncStorage在iOS下存储分两种情况:

如果存储的内容较小,那么AsyncStorage会将要存储的内容凡在个序列化的字典中;
如果存储的值较大,那么AsyncStorage会将存储的内容放在一个单独的文件中;
AsyncStorage在Android下的存储也分两种情况:

AsyncStorage会将数据存储在 RocksDB 或者 SQLite ,具体存储在 RocksDB 中还是SQLite中这取决于设备支持哪一种存储方式了。

如何使用AsyncStorage?

安装

AsyncStorage安装指南
npm install @react-native-async-storage/async-storage
npx pod-install //如果你的是Mac系统需要执行下pod安装
注意:按照完成之后记得通过npm run命令重新运行项目。

使用
import AsyncStorage from ‘@react-native-async-storage/async-storage’;
存储数据
函数原型

static getItem(key: string, [callback]: ?(error: ?Error, result: ?string) => void): Promise
示例

/**
 * 存储数据
 * @returns {Promise.<void>}
 */
async doSave() {
    //用法一
    AsyncStorage.setItem(KEY, this.value, error => {
        error && console.log(error.toString());
    });

    //用法二
    AsyncStorage.setItem(KEY, this.value)
        .catch(error => {
            error && console.log(error.toString());
        });

    //用法三
    try {
        await  AsyncStorage.setItem(KEY, this.value);
    } catch (error) {
        error && console.log(error.toString());
    }
}

读取数据 函数原型

static getItem(key: string, [callback]: ?(error: ?Error, result: ?string) => void): Promise
示例

/**
 * 获取数据
 */
async getData() {
    //用法一
    AsyncStorage.getItem(KEY, (error, value) => {
        this.setState({
            showText: value
        });
        console.log(value);
        error && console.log(error.toString());
    });
    //用法二
    AsyncStorage.getItem(KEY)
        .then(value => {
            this.setState({
                showText: value
            });
            console.log(value);

        })
        .catch(error => {
            error && console.log(error.toString());
        });
    //用法三
    try {
        const value = await  AsyncStorage.getItem(KEY);
        this.setState({
            showText: value
        });
        console.log(value);
    } catch (error) {
        error && console.log(error.toString());
    }
}

删除数据 函数原型

static removeItem(key: string, [callback]: ?(error: ?Error) => void): Promise
示例

/**
 * 删除数据
 * @returns {Promise.<void>}
 */
async doRemove() {
    //用法一
    AsyncStorage.removeItem(KEY,error => {
        error && console.log(error.toString());
    });

    //用法二
    AsyncStorage.removeItem(KEY)
        .catch(error => {
            error && console.log(error.toString());
        });

    //用法三
    try {
        await  AsyncStorage.removeItem(KEY);
    } catch (error) {
        error && console.log(error.toString());
    }
}

AsyncStorage有那些常用的API?

setItem()

方法原型:static setItem(key: string, value: string, [callback]: ?(error: ?Error) => void)

该方法提供以key,value键值对的方式存储数据,方法的第三个参数是错误callback,可以通过判断error是否为空来判断是否保存成功。方法返回一个Promise对象。

getItem()

方法原型:static getItem(key: string, [callback]: ?(error: ?Error, result: ?string) => void)

该方法用户获取存储的数据,方法的第二个参数是callback(error,result),完成读取数据后会回调该方。方法返回一个Promise对象。

removeItem()

方法原型:static removeItem(key: string, [callback]: ?(error: ?Error) => void)

删除一个字段。可以通过判断error是否为空来判断是否保存成功。方法返回一个Promise对象。

更多API可参考react-native-async-storage官网对AsyncStorage的介绍。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐