React native 为什么AsyncStorage getAllKeys不返回null?具有多个视图,要根据找到的数据进行渲染,请删除所有关键点

React native 为什么AsyncStorage getAllKeys不返回null?具有多个视图,要根据找到的数据进行渲染,请删除所有关键点,react-native,asyncstorage,React Native,Asyncstorage,我在状态中存储了一个名为isDataReady的布尔值。如果我通过AsyncStorage找到密钥,我会将其设置为true并显示一个数据列表。如果什么都没有找到,那么我想渲染一个不同的视图。我的数据显示得很好,但由于删除了所有内容,我无法显示我的简介屏幕。这是因为AsyncStorage从不为null,尽管它们没有键。我做错了什么 代码(为清晰起见,删除了查看相关代码) constructor(){ 超级(); 这个州={ 膳食:[], isDataReady:错误, } } component

我在状态中存储了一个名为isDataReady的布尔值。如果我通过AsyncStorage找到密钥,我会将其设置为true并显示一个数据列表。如果什么都没有找到,那么我想渲染一个不同的视图。我的数据显示得很好,但由于删除了所有内容,我无法显示我的简介屏幕。这是因为AsyncStorage从不为null,尽管它们没有键。我做错了什么

代码(为清晰起见,删除了查看相关代码)

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>
    );
   }
 }
}