我尝试加载fontfamily,我使用了具有异步功能的钩子,但出现了一些错误:
function Button(props: TouchableOpacityProps & ButtonProps) {
useEffect(() => {
async function loadFont() {
await Font.loadAsync({
gotham_medium: require("../../assets/GothamMedium_1.ttf")
});
}
loadFont()
}, []);
return (
<TouchableOpacity {...props} style={styles.button}>
<Text style={styles.title}>{props.title}</Text>
</TouchableOpacity>
);
};
我从expo导入了Font,并从react导入了useEffect,但是出现此错误。 error on the device
答案 0 :(得分:2)
这是我在应用程序上拥有的功能,以防它对某人有所帮助。
useEffect(() => {
const loadFonts = async () => {
await Font.loadAsync({
'pokeh': require('../../assets/fonts/pokeh.ttf'),
});
setFontReady(true);
};
loadFonts();
}, []);
使用npm安装expo-font之后,这两个位于顶部
import * as Font from 'expo-font';
import { AppLoading } from 'expo';
在此树状结构下:
答案 1 :(得分:0)
您的错误可能是由错误的React版本产生的。您确定至少使用Expo SDK 33吗?
如果这不是问题,我相信如果您在此过程中尽早加载所有资产,可能会更容易。 Expo提供了一个AppLoading
组件,该组件带有一个startAsync
道具,可用于轻松解决所有异步诺言。
所以您的App.js
可能像这样:
import { AppLoading } from 'expo';
import * as Font from 'expo-font';
import React, { useState } from 'react';
import { StyleSheet, View, Text } from 'react-native';
export default function App(props) {
const [isLoadingComplete, setLoadingComplete] = useState(false);
if (!isLoadingComplete && !props.skipLoadingScreen) {
return (
<AppLoading
startAsync={loadResourcesAsync}
onError={handleLoadingError}
onFinish={() => handleFinishLoading(setLoadingComplete)}
/>
);
} else {
return (
<View style={styles.container}>
<Text style={styles.title}>Welcome to your Expo app</Text>
</View>
);
}
}
async function loadResourcesAsync() {
await Promise.all([
Font.loadAsync({
'gotham-medium': require('./assets/GothamMedium_1.ttf')
}),
]);
}
function handleLoadingError(error) {
console.warn(error);
}
function handleFinishLoading(setLoadingComplete) {
setLoadingComplete(true);
}
const styles = StyleSheet.create({
container: {
marginTop: 60,
flex: 1,
backgroundColor: '#fff',
},
title: {
fontFamily: 'gotham-medium',
fontSize: 36
}
});
,然后您就可以在应用中的任何地方访问fontFamily: 'gotham-medium'
。您也可以在Promise.all()
调用中解决多个承诺(加载其他资产等)。
让我知道是否有帮助。干杯!