在玩了一阵子之后,我终于弄清楚了哪里出了问题。因此,只要您使用的是功能组件,您就可以按照这些思路进行尝试。
之后(工作)
import React, { useState, useEffect} from 'react';
import { View, Text, StyleSheet, ActivityIndicator } from 'react-native';
import * as firebase from 'firebase';
import * as Font from 'expo-font';
export default function LoadingScreen({ navigation }) {
const [fontsLoaded, setFontsLoaded] = useState(false);
useEffect(() => {
Font.loadAsync({
'montserrat-bold': require('../assets/fonts/Montserrat-Bold.ttf'),
'montserrat-light': require('../assets/fonts/Montserrat-Light.ttf'),
'montserrat-regular': require('../assets/fonts/Montserrat-Regular.ttf'),
'montserrat-thin': require('../assets/fonts/Montserrat-Thin.ttf'),
}).then(() => setFontsLoaded(true));
}, []);
if (fontsLoaded) {
firebase.auth().onAuthStateChanged(user => {
navigation.navigate(user ? 'App' : 'Auth')
})
}
return (
<View style={styles.container}>
<Text>Loading...</Text>
<ActivityIndicator size="large"></ActivityIndicator>
</View>
);
}
之前(不工作)
import React, { useState, useFont} from 'react';
import { View, Text, StyleSheet, ActivityIndicator } from 'react-native';
import * as firebase from 'firebase';
import * as Font from 'expo-font';
export default function LoadingScreen() {
let [fontsLoaded] = Font.useFonts({
'montserrat-bold': require('../assets/fonts/Montserrat-Bold.ttf'),
'montserrat-light': require('../assets/fonts/Montserrat-Light.ttf'),
'montserrat-regular': require('../assets/fonts/Montserrat-Regular.ttf'),
'montserrat-thin': require('../assets/fonts/Montserrat-Thin.ttf'),
});
if (!fontsLoaded) {
return (
<View style={styles.container}>
<Text>Loading...</Text>
<ActivityIndicator size="large"></ActivityIndicator>
</View>
);
}
if (fontsLoaded) {
firebase.auth().onAuthStateChanged(user => {
this.props.navigation.navigate(user ? 'App' : 'Auth')
})
}
}
基本上在等待状态更新的路线上有一个加载器或类似 ActivityIndicator 的东西,并且在 Font.loadFonts 加载后它会点击 if 语句,您可能只返回应用程序导航器。我不是的原因是我使用 firebase 的身份验证流程。