使用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 重启应用后