我下面的代码不会运行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,请帮助!
答案 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;