世博会SecureStore getItem

时间:2019-01-14 22:15:17

标签: react-native expo walkthrough

我下面的代码不会运行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 />
          ); 
      }
  };

我的console.log返回value = true,但是我的if语句从不只运行else,请帮助!

2 个答案:

答案 0 :(得分:0)

我认为.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,如果存储在SecureStore中的值等于“ true”,则它会更新notFirstLaunch变量的状态;如果它是第一次启动,它也会设置SecureStore中的值。状态更改会导致重新渲染,然后显示正确的视图。

答案 1 :(得分:0)

您需要将行导入文件中: 从“ expo-secure-store”导入*作为SecureStore;