【发布时间】:2021-08-26 10:34:23
【问题描述】:
我在 React Native 应用程序中使用 AsyncStorage,并且(如果我理解正确的文档)如果没有为给定键存储任何内容,getItem() 方法应该返回 null。
来自文档:
getItem() ... 返回:如果给定键存在条目,则使用字符串值解析 Promise,否则返回 null。"
但是,每当我为新密钥获取数据时,它永远不会为空。我的 getItem 函数位于 useEffect 挂钩中,用于尝试在第一次渲染之前加载数据。
useEffect(() => {
getData();
}, []);
const storeData = async () => {
try {
setMyInfo({...})
const jsonInfo = JSON.stringify({myInfo})
await AsyncStorage.setItem(storage_Key, jsonInfo)
alert('Data successfully saved')
} catch (e) {
alert('Failed to save the data to the storage')
}
}
const getData = async () => {
try {
let data = await AsyncStorage.getItem(storage_Key);
if (data !== null) {
setMyInfo(JSON.parse(data));
} else {
alert("test");
}
} catch (e) {
alert("Failed to fetch the data from storage");
}
};
myInfo,该变量是一个 JSON 对象,它实际上似乎用“无用占位符”填充了所有值。像这样:
myInfo = {
value1: "Useless Placeholder",
value2: "Useless Placeholder",
};
我目前的解决方案:
即使 getItem() 函数在 useEffect 钩子内,myInfo 变量在开始时对于 half second 是未定义的。因此,如果定义了变量,我有一个三元运算符来显示值。
<Text>{typeof myInfo === 'undefined' ? '' : myInfo.value1}</Text>
如果我只是尝试显示myInfo.value1,它将引发“myInfo is undefined”错误。但是,这样一来,即使在为指定键存储任何数据之前,打开此页面时也会出现“无用占位符”的值。
目前这对我有用,但我们将不胜感激有关如何在此处实际使用 asynstorage 的一些指导。
【问题讨论】:
-
那么你得到什么而不是'null'?
-
这很奇怪。它作为所有值都是“无用占位符”的 JSON 对象返回。这不是我曾经存储过的东西。即使在保存了一些不是“无用占位符”的新数据然后重新启动开发过程之后,它仍然会返回该结构和值。奇怪的是我也没有指定 JSON 结构。在第一次渲染时,我用那个键提取数据