【问题标题】:Error while loading custom fonts in expo project在 expo 项目中加载自定义字体时出错
【发布时间】:2021-07-12 10:29:17
【问题描述】:

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

这是我的 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;

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

【问题讨论】:

    标签: reactjs react-native expo


    【解决方案1】:

    Working Example here

    首先,运行npm i expo-font

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

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

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

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

    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: {},
    });
    

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

    【讨论】:

    • 感谢兄弟的帮助,但我最近遇到了操作系统问题,所以所有数据都消失了,但我现在会处理它。
    • 如果这个答案有助于您考虑接受它,以便它可以帮助社区中的其他人
    • 是的,这个答案有效,但我意识到当我升级我的系统时,一些博览会的依赖项受到了影响,所以我没有得到我的输出。
    • 检查我更新的答案。拥有所有最新的博览会依赖项。
    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2019-07-17
    • 2017-11-02
    • 2019-03-25
    相关资源
    最近更新 更多