【发布时间】:2020-07-10 18:10:19
【问题描述】:
我在状态中存储了一个名为 isDataReady 的布尔值。如果我通过 AsyncStorage 找到密钥,我将其设置为 true 并显示数据列表。如果什么也没找到,那么我想渲染一个不同的视图。我的数据显示正常,但删除所有内容后,我无法显示介绍屏幕。这是因为 AsyncStorage 永远不会为空,尽管它们没有键。我做错了什么?
代码(为了清楚起见,查看相关代码已删除)
constructor() {
super();
this.state={
meals: [],
isDataReady: false,
}
}
componentDidMount() {
this.getAllMeals();
}
getAllMeals = async () => {
try {
const data = [];
let keys = await AsyncStorage.getAllKeys();
// await AsyncStorage.multiRemove(keys);
if (keys !== null) {
for (let inKey of keys) {
let obj = await AsyncStorage.getItem(inKey);
obj = JSON.parse(obj);
obj["key"] = inKey;
data.push(obj);
}
this.setState({
meals: data,
isDataReady: true
})
} else {
this.setState({
isDataReady: false
})
}
} catch (error) {
console.log("Error saving all meals. Error: " + error)
}
}
render() {
if (this.state.isDataReady === true) {
return (
<View style={styles.container}>
</View>
);
} else if (this.state.isDataReady === false) {
return (
<ScrollView>
<View style={styles.container}>
</View>
</ScrollView>
);
}
}
}
【问题讨论】:
-
请使用 ctrl+k+d 或其他格式代码然后显示,现在一切都是混合的,无法理解的代码块,第二个 getAllKeys 可能返回数组并且可能不是 null ,单个键可能为 null 但是多键为数组,检查数组长度
-
@NijatAliyev 所有这些代码都是同一个文件。
-
@NijatAliyev 成功了,谢谢!我之前尝试过长度,但必须在其他事情上完成,例如对象。
-
是的,我现在也测试了 AsyncStorage.getAllKeys() return empty [] not null。