javascript - 如何在 React Native 中本地存储不是字符串的数据

标签 javascript reactjs react-native local-storage

我正在寻找一种在 React Native 中本地存储对象和数据数组的方法。如何才能做到这一点?查看 AsyncStorage 的 api:

static setItem(key: string, value: string, callback?: ?(error: ?Error) => void)
设置键的值并在完成时调用回调,如果有任何错误,则调用回调。返回一个 Promise 对象。

我如何在 React Native 中本地存储对象和数组?

最佳答案

JSON.stringify({}) 可用于将您的数据结构转换为字符串。

然后您将使用 JSON.parse() 将字符串转换回原始数据结构。

您可以为此创建一个很好的服务,以消除整个应用程序中的一些样板代码。在下面的示例中,我使用了 React Native 的内置 AsyncStorage API 作为“持久”存储工具。按照您认为合适的方式进行调整。

使用 React Native 的示例

使用 JSON API 将对象存储在持久存储中,即 React Native 的 AyncStorage,然后检索该值,并将其输出到 Text 元素中。未经测试。

Storage.js 文件 - 请注意,此示例对象 API 提供了一个 子集 包装器,围绕 ReactNative 的 AsyncStorage API 提供的内容,您可以调整它以允许设置多个键,例如,而不是一次一个.

//./storage.js
const Storage = {

    getItem: async function (key) {
        let item = await AsyncStorage.getItem(key);
        //You'd want to error check for failed JSON parsing...
        return JSON.parse(item);
    },
    setItem: async function (key, value) {
        return await AsyncStorage.setItem(key, JSON.stringify(value));
    },
    removeItem: async function (key) {
        return await AsyncStorage.removeItem(key);
    }
};

React Native 组件

//Usage...
import React, {Component} from "react";
import { View, Text } from "react-native";
import Storage from "./storage";

class Foo extends Component {

    constructor (props) {

        super(props);

        this.state = {
            greeting: ""
        };
    } 

    async componentDidMount () {

        await Storage.setItem("someObj", {value: "bar", id: 1});

        let obj = await Storage.getItem("someObj");

        this.setState({
             greeting: obj.value // Will be "bar" 
        });

    }

    render () {

         return (
               <View>
                    <Text>{this.state.greeting}</Text>
               </View>
         );
    }
}

原始示例:

因为我最初是在移动设备上回答这个问题,所以我最初使用 HTML5 localStorage api 作为示例,它输入起来更快(而且很冷!),这里只是为了以防万一有人登陆这个进行 react ,没有错误地 react native 。

var StorageService = function  () {};

StorageService.prototype.get = function (key) {
    return JSON.parse(window.localStorage.getItem(key));
};

StorageService.prototype.set = function (key, value) {
    return window.localStorage.setItem(key, JSON.stringify(value));
};

关于javascript - 如何在 React Native 中本地存储不是字符串的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790143/

相关文章:

reactjs - 未处理的拒绝(SecurityError): The operation is insecure. 在新的 create-react-app 项目上

react-native - extends Component<Props> 与 extends React.Component

ios - React Native Hot Reloading 不适用于 IOS 模拟器

javascript - 如何在我的客户端代码中设置环境变量?

Javascript 日期到 C# 可排序 ("s") 格式

JavaScript 数学(参数传递、数组和 "apply"方法)

javascript - 如何向 Google Cast 应用程序添加标准媒体控件?

reactjs - 引用错误 : Cannot access 'steps' before initialization

javascript - 从孙子组件传播方法

java - 如何在弹出的expo项目中安装react-navigation?