在 expo 项目中加载自定义字体时出错 [英] Error while loading custom fonts in expo project

查看:23
本文介绍了在 expo 项目中加载自定义字体时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的 expo 托管项目中加载字体,我已按照 https://docs.expo.io/versions/latest/sdk/font/ 但它向我显示了这个错误"错误:App(...):渲染没有返回任何内容.这通常意味着缺少 return 语句.或者,不渲染任何内容,返回 null."

I am trying to load fonts in my expo managed project, I've followed the example given at https://docs.expo.io/versions/latest/sdk/font/ but it shows me this error "Error: App(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null."

这是我的 App.js 代码

Here's my code for App.js

import React from "react";
import { View } from "react-native";
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
import { useFonts } from "expo-font";
import { AppLoading } from "expo";

import LoginScreen from "./assets/Screens/LoginScreen";
import RegisterScreen from "./assets/Screens/RegisterScreen";

const Stack = createStackNavigator();

const App = () => {
  const [isFontLoaded] = useFonts({
    nimbusBold: require("./assets/fonts/NimbusMonoPS-Bold.otf"),
    nimbusRegular: require("./assets/fonts/NimbusMonoPS-Regular.otf"),
  });

  if (!isFontLoaded) {
    return AppLoading;
  }

  return (
    <NavigationContainer>
      <Stack.Navigator
        initialRouteName="Login"
        screenOptions={{
          headerShown: false,
        }}
      >
        <Stack.Screen name="Login" component={LoginScreen} />
        <Stack.Screen name="Register" component={RegisterScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
};

export default App;

有谁知道为什么会这样.感谢您宝贵的时间并提前回答.

Does anyone know why is this happening. Thanks for precious time and answer in advance.

推荐答案

这里的工作示例

首先,运行 npm i expo-font

然后,运行 npm i @expo-google-fonts/open-sans

然后,运行 npm i expo-app-loading

然后在您的项目文件夹中创建一个名为 hooks 的文件,您的 App.js 所在的位置.

Then in your project folder create a file called hooks where your App.js is located.

hooks 文件夹中创建一个名为 useFonts.js 的文件并在其中粘贴此代码

in hooks folder create a file called useFonts.js and inside that paste this code

import * as Font from 'expo-font';

const useFonts = async () => {
  await Font.loadAsync({
    Montserrat: require('../assets/fonts/Mulish.ttf'),
  });
};

export default useFonts;

您的 App.js 应如下所示

import React, { Component, useState } from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import AppLoading from 'expo-app-loading'; // This is must

import useFonts from './hooks/useFonts';

import LoginScreen from './assets/screens/LoginScreen';
import RegisterScreen from './assets/screens/RegisterScreen';

const Stack = createStackNavigator();

export default function App(props) {
  const [IsReady, SetIsReady] = useState(false);

  const LoadFontsAndRestoreToken = async () => {
    await useFonts();
  };

  if (!IsReady) {
    return (
      <AppLoading
        startAsync={LoadFontsAndRestoreToken}
        onFinish={() => SetIsReady(true)}
        onError={() => {}}
      />
    );
  }

  return (
    <NavigationContainer>
      <Stack.Navigator
        initialRouteName="Login"
        screenOptions={{
          headerShown: false,
        }}>
        <Stack.Screen name="Login" component={LoginScreen} />
        <Stack.Screen name="Register" component={RegisterScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

你的 LoginScreen.js 应该是这样的

import React from 'react';
import { View, StyleSheet, Text } from 'react-native';

function LoginScreen(props) {
  return (
    <View style={styles.container}>
      <Text style={{ fontFamily: 'Montserrat', fontSize: 30 }}>
        LoginScreen with fontFamily
      </Text>
      <Text style={{ fontSize: 30 }}>LoginScreen without fontFamily</Text>
    </View>
  );
}

export default LoginScreen;

const styles = StyleSheet.create({
  container: {},
});

这是加载字体的最佳方式,我在所有项目中都这样做.

This is the best way to load fonts and I do it like this in all my projects.

这篇关于在 expo 项目中加载自定义字体时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆