React native 为什么AsyncStorage getAllKeys不返回null?具有多个视图,要根据找到的数据进行渲染,请删除所有关键点
我在状态中存储了一个名为isDataReady的布尔值。如果我通过AsyncStorage找到密钥,我会将其设置为true并显示一个数据列表。如果什么都没有找到,那么我想渲染一个不同的视图。我的数据显示得很好,但由于删除了所有内容,我无法显示我的简介屏幕。这是因为AsyncStorage从不为null,尽管它们没有键。我做错了什么 代码(为清晰起见,删除了查看相关代码)React native 为什么AsyncStorage getAllKeys不返回null?具有多个视图,要根据找到的数据进行渲染,请删除所有关键点,react-native,asyncstorage,React Native,Asyncstorage,我在状态中存储了一个名为isDataReady的布尔值。如果我通过AsyncStorage找到密钥,我会将其设置为true并显示一个数据列表。如果什么都没有找到,那么我想渲染一个不同的视图。我的数据显示得很好,但由于删除了所有内容,我无法显示我的简介屏幕。这是因为AsyncStorage从不为null,尽管它们没有键。我做错了什么 代码(为清晰起见,删除了查看相关代码) constructor(){ 超级(); 这个州={ 膳食:[], isDataReady:错误, } } component
constructor(){
超级();
这个州={
膳食:[],
isDataReady:错误,
}
}
componentDidMount(){
这个。GetAllFounds();
}
GetAllFinds=async()=>{
试一试{
常量数据=[];
let keys=等待AsyncStorage.getAllKeys();
//等待异步存储。多重删除(密钥);
如果(键!==null){
对于(让inKey的钥匙){
让obj=等待AsyncStorage.getItem(inKey);
obj=JSON.parse(obj);
obj[“键”]=inKey;
数据推送(obj);
}
这是我的国家({
膳食:数据,
isDataReady:对
})
}否则{
这是我的国家({
isDataReady:错误
})
}
}捕获(错误){
日志(“保存所有膳食时出错。错误:+错误)
}
}
render(){
if(this.state.isDataReady==true){
返回(
);
}else if(this.state.isDataReady==false){
返回(
);
}
}
}
我将if语句更改为if(keys.length!==0)
,始终返回数组,因此它永远不会为空。请使用ctrl+k+d或其他格式代码,然后显示,现在所有内容都是混合的,无法理解代码块,第二个getAllKeys可能返回数组,并且可能不为空,单键可能为空,但多键是数组,校验数组length@NijatAliyev所有这些代码都是同一个文件。@NijatAliyev有效,谢谢!我之前尝试了length,但必须在其他对象上完成。是的,我现在也测试了AsyncStorage。getAllKeys()返回空[]非null。
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>
);
}
}
}