我试图将一个值保存到异步存储,然后根据异步存储的值结果导航到正确的页面.我可以将数据存储在AsyncStorage中,但我的状态不会更新,我必须重新加载应用程序才能更新状态.这是我的代码:
这里有一个欢迎/反对屏幕.我希望此屏幕仅显示给新的应用程序用户.因此,当用户按下"继续"按钮时,我希望将一个值保存到异步存储中,以便下次登录时,他们不必再次看到登录页面.这是我的入职页面:
const WelcomeScreen: FC<IWelcomeScreen> = ({ navigation }) => {
const { width, height } = Dimensions.get("window");
const btnText = "Contiunue";
const title = "Book";
const subTitle = "Fab";
let [fontsLoaded] = useFonts({
PinyonScript_400Regular,
});
const continueBtn = async () => {
try {
await AsyncStorage.setItem('@viewedOnboarding', 'true');
} catch (error) {
console.log('Error @setItem: ', error);
};
};
if (!fontsLoaded) {
return <Text>...Loading</Text>;
} else {
return (
<View style={containerStyle(height, width).container}>
<ImageBackground
resizeMode={"cover"}
style={styles.image}
source={require("../assets/model.jpg")}
>
<LinearGradient
colors={["#00000000", "#000000"]}
style={styles.gradient}
>
<View style={styles.container}>
<View style={styles.logoTextContainer}>
<Text style={styles.logoText}>{title}</Text>
<Text style={styles.logoText}>{subTitle}</Text>
</View>
<ContinueBtn label={btnText} callback={continueBtn} />
</View>
</LinearGradient>
</ImageBackground>
</View>
);
}
};
在我的AppNavigator中,我想决定用户应该看到哪个导航.但当我按下"继续"页面时,我的应用程序不会导航到我的TabsNavigator.它保留在我的入职页面上,但如果我刷新应用程序,则应用程序将导航到我的选项卡导航器.下面是我确定用户应该在哪里的代码,这取决于他们是新用户还是"旧"用户:
const WelcomeScreen: FC<IWelcomeScreen> = ({ navigation }) => {
const { width, height } = Dimensions.get("window");
const btnText = "Contiunue";
const title = "Book";
const subTitle = "Fab";
let [fontsLoaded] = useFonts({
PinyonScript_400Regular,
});
const continueBtn = async () => {
try {
await AsyncStorage.setItem('@viewedOnboarding', 'true');
} catch (error) {
console.log('Error @setItem: ', error);
};
};
if (!fontsLoaded) {
return <Text>...Loading</Text>;
} else {
return (
<View style={containerStyle(height, width).container}>
<ImageBackground
resizeMode={"cover"}
style={styles.image}
source={require("../assets/model.jpg")}
>
<LinearGradient
colors={["#00000000", "#000000"]}
style={styles.gradient}
>
<View style={styles.container}>
<View style={styles.logoTextContainer}>
<Text style={styles.logoText}>{title}</Text>
<Text style={styles.logoText}>{subTitle}</Text>
</View>
<ContinueBtn label={btnText} callback={continueBtn} />
</View>
</LinearGradient>
</ImageBackground>
</View>
);
}
};