使用AsyncStorage时遇到的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用AsyncStorage时遇到的问题相关的知识,希望对你有一定的参考价值。

我正在开发一个简单的应用程序,我需要保存一些用户数据,所以我使用AsyncStorage这样的功能。

const storeAge = async (age) => {
        try {
            console.log("STORED age: " +  age);
            await AsyncStorage.setItem("@age", age);
        } catch (e) {
            // saving error
        }
    };

我在这里调用这个函数。

<SetupInfo
    visible={isStartUp}
    onRegist={registHandler}
    onRegistDataSave={storeAge}
/>

在这里调用这个函数: onRegistDataSave 当按下SetupInfo组件上的一个按钮时,会被调用。

const addRegistHandlerMemory = () => {
        if (!isEnabled) {
            props.onRegistDataSave(age / 12);
        } else {
            props.onRegistDataSave(age);
        }
        setAge("");
    };

...

<Button
    title="REGIST"
    onPress={() => {
        addRegistHandler();
        addRegistHandlerMemory();
        }}
        style={styles.button}
    />

当按钮被按下时,store.age上的console.log显示的是正确的输入,但是当我重新加载应用程序并调用这个函数时,我得到的值是null,为什么会这样?

const getAge = async () => {
    try {
        const value = await AsyncStorage.getItem("@age");
        if (value !== null) {
            console.log("valor" + value)
            setAppMode(false);
            setAge(parseFloat(value));

        }
        console.log("age " + value);
    } catch (e) {
        // error reading value
    }

};

我得到的值是空的,为什么会这样?

(好吧,我想我知道,因为我正在做同样的思考,在一个数组上保存数据,最后一个值没有保存,这意味着可能是保存在下一个渲染上,对我来说--一个新手--没有意义,因为设置年龄是一个异步函数,应该避免这种情况...)

答案

哦,我想明白了,是哪里出错了。原来我保存的是一个数字,而AsyncStorage只保存Strings,所以我只需要加上 const string = toString(age); 关于 storeAge 并保存该值。

以上是关于使用AsyncStorage时遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

反应本机打字稿屏幕测试返回测试套件无法运行 AsyncStorage 为空

从本机代码存储时,React Native AsyncStorage 无法查看来自 javascript 的更新数据

用户打开应用程序时如何检查 AsyncStorage 并将其保存到道具

Expo Show AsyncStorage data 重启应用后

(React Native)设置 AsyncStorage 值但在我检索它时得到垃圾

在 asyncStorage 中存储数组状态对象