Почему AsyncStorage getAllKeys не возвращает значение null? Имеет несколько представлений, требуется рендеринг на основе найденных данных, все ключи удалены. - PullRequest
0 голосов
/ 10 июля 2020

У меня есть логическое значение isDataReady, хранящееся в состоянии. Если я нахожу ключи через AsyncStorage, я устанавливаю его true и показываю список данных. Если ничего не найдено, я хочу отобразить другой вид. Мои данные отображаются нормально, но со всем deletef я не могу отобразить вводный экран. Это потому, что AsyncStorage никогда не имеет значения 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>
    );
   }
 }
}

1 Ответ

1 голос
/ 10 июля 2020

Я меняю оператор if на if (keys.length !== 0), всегда возвращает массив, поэтому он никогда не будет нулевым.

...