您在这里是正确的,我使用 AsyncStorage 的原因与您相同,它应该能够在 expo 服务器重新启动后获取您的数据。我相信您正在使用的情况:
AsyncStorage.setItem("exampleData")
为了再次检索exampleData,您必须使用:
AsyncStorage.getItem("exampleData")
并将 exampleData 存储到您的 redux 中。 (我假设您使用的是 redux,但如果您不告诉我!)
您也可以在屏幕设置中实现此功能,以便应用的第一个屏幕检索该 AsyncStorage 数据。我会给你一个例子来说明我的代码是如何工作的。
这里我的导航设置为:
const MainNavigator = createSwitchNavigator({
Startup: StartupScreen, // <-- This is the screen that gets the item
StartAuth: StartSignup,
Intro: IntroStack,
Project: FullAppNavigator,
});
StartUpScreen 为:
import React, { useEffect } from "react";
import { View, StyleSheet, ActivityIndicator } from "react-native";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { useDispatch } from "react-redux";
import { authenticate, logout } from "../store/actions/auth";
import { getUserData } from "../store/actions/user";
const StartupScreen = (props) => {
const dispatch = useDispatch();
useEffect(() => {
const tryLogin = async () => {
const userData = await AsyncStorage.getItem("exampleData"); // <-- here
if (!userData) {
props.navigation.navigate("StartAuth");
return;
}
const transformedData = JSON.parse(userData);
const { localId, token, introing } = transformedData;
if (!token || !localId) {
props.navigation.navigate("StartAuth");
return;
}
if (introing) {
await dispatch(getUserData());
await dispatch(authenticate(localId, token));
await props.navigation.navigate("Intro");
} else {
await dispatch(getUserData());
await dispatch(authenticate(localId, token));
await props.navigation.navigate("Project");
}
};
tryLogin();
}, [dispatch]);
return (
<View style={styles.screen}>
<ActivityIndicator size="large" color="white" />
</View>
);
};
const styles = StyleSheet.create({
screen: {
flex: 1,
justifyContent: "center",
alignItems: "center",
},
});
export default StartupScreen;
如您所见,它从await AsyncStorage.getItem("exampleData") 获取项目,然后在检索到该项目后导航到下一个屏幕。在我的例子中,它接收到一个令牌,当它接收到该令牌时,它从操作getUserData 中获取另一个项目,然后导航。
走这条路线还允许您在从 AsyncStorage 检索数据时实现加载屏幕,正如您在 StartupScreen 中看到的 ActivityIndicator 所见。