【发布时间】:2020-11-03 12:17:18
【问题描述】:
刚刚为我的应用添加了启动画面,但它似乎没有在第一时间运行。
我的意思是当我在 avd 模拟器上运行应用程序时,我仍然会先加载白屏几毫秒,然后再加载启动画面。有什么原因还是我使用了错误的功能?
这是我的加载屏幕代码:
function LoadingScreen ({navigation}) {
setTimeout (() => {
navigation.replace('FirstScreen');
}, 4000);
return (
<ImageBackground style={styles.backgroundContainer} source={splashScreen}/>
);
};
const Stack = createStackNavigator();
const PERSISTENCE_KEY = 'NAVIGATION_STATE';
function App() {
const [isReady, setIsReady] = React.useState(false);
const [initialState, setInitialState] = React.useState();
React.useEffect(() => {
const restoreState = async () => {
try {
const savedStateString = await AsyncStorage.getItem(PERSISTENCE_KEY);
const state = savedStateString ? JSON.parse(savedStateString) : undefined;
if (state !== undefined) {
setInitialState(state);
}
} finally {
setIsReady(true);
}
};
if (!isReady) {
restoreState();
}
}, [isReady]);
if (!isReady) {
return <ImageBackground style={styles.backgroundContainer} source={splashScreen}/>
}
return(
<NavigationContainer
initialState={initialState}
onStateChange={(state) =>
AsyncStorage.setItem(PERSISTENCE_KEY, JSON.stringify(state))
}
>
<Stack.Navigator initialRouteName='SplashScreen' headerMode='none' >
<Stack.Screen name = 'SplashScreen' component={LoadingScreen}/>
<Stack.Screen name ='FirstScreen' component={FirstScreen}/>
【问题讨论】:
-
你的 useEffect 运行了吗?您将默认值设置为 false 并在效果内设置值,但要让效果运行依赖 isReady 应该更改
标签: javascript react-native splash-screen stack-navigator