世博会 SecureStore getItem

Expo SecureStore getItem

我下面的代码不会 运行 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 returns value = true 但我的 if 语句从来没有 运行 只有 else,请帮忙!

我认为 .then 块中的代码存在问题。我无法确定,但在我看来 return 语句不会影响渲染。

如果我打算做你正在做的事情,这就是我重构你的组件的方式。显然,您将更改每个用例的 returned,而不是我输入的简单视图。

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 中设置值。状态的变化导致重新渲染,然后显示正确的视图。

您需要在文件中导入以下行: 从 'expo-secure-store';

导入 * 作为 SecureStore