Экспо SecureStore getItem - PullRequest
       22

Экспо SecureStore getItem

0 голосов
/ 15 января 2019

Мой код ниже не будет запускать оператор if, только else.

SecureStore.getItemAsync('notFirstLaunch').then((value) => {
      LaunchApp(value);
    });

    const LaunchApp = function (value) {
      console.log(value);
      if (value === "true") {
        return (
          <SafeAreaView forceInset={{ bottom: 0 }} style={{ flex: 1, backgroundColor: '#E65100' }}>
              <Main />
          </SafeAreaView>
        );
      }
      else {
        SecureStore.setItemAsync('notFirstLaunch', "true");
          return (
              <Walkthrough />
          ); 
      }
  };

my console.log возвращает значение = true, но оператор if никогда не выполняет только else, пожалуйста, помогите!

1 Ответ

0 голосов
/ 15 января 2019

Я думаю, что есть проблема с кодом, который происходит в блоке .then. Я не могу это понять, но мне кажется, что операторы return не повлияют на рендер.

Так я бы реорганизовал ваш компонент, если бы планировал делать то, что вы делаете. Очевидно, вы будете изменять то, что возвращается для каждого варианта использования, а не упрощенные представления, которые я вставил.

export default class App extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      notFirstLaunch: false
    }
  }

  componentDidMount() {
    this.firstLaunchCheck();
  }

  firstLaunchCheck = () => {
    SecureStore.getItemAsync('notFirstLaunch').then(value => {
      if (value !== 'true') {
        SecureStore.setItemAsync('notFirstLaunch', 'true');
      } 
      this.setState({notFirstLaunch: value === 'true'})
    });
  }

  render() {
    if (this.state.notFirstLaunch) {
      return (
        <View style={styles.container}>
          <Text>Main</Text>
        </View>
      );
    } else {
      return (
        <View style={styles.container}>
          <Text>Walkthrough</Text>
        </View>
      );
    } 
  }
}

Когда компонент монтируется, я вызываю firstLaunchCheck, затем он обновляет состояние переменной notFirstLaunch, если значение, которое было сохранено в SecureStore, равно «true», если это первый запуск, он также устанавливает значение в SecureStore. Изменение в состоянии вызывает повторную визуализацию, которая затем показывает правильное представление.

...