当前位置: 首页 > 知识库问答 >
问题:

对检查应用程序的呈现方法的本机错误做出反应

甄志
2023-03-14

我正在制作一个react原生应用程序,现在正在尝试放置一个下载的字体,我一直在检查应用程序错误的渲染方法,然后在它下面,它说

此错误位于:在应用(由 ExpoRoot 创建)在 ExpoRoot 中(在渲染html" target="_blank">应用程序.js:45)在 RCTView(在视图.js:34)在视图(在应用程序容器.js:106)在 RCTView(在视图.js:34)在视图(在应用程序容器.js:132)在应用程序容器(在呈现应用程序.js:39)

我看过类似的问题,但没有他们的解决方案解决了我的问题,所以我从他们的解决方法中得出结论,这是一个导入或导出错误,但我所有的东西都是正确导入和导出的,所以我不知道问题是什么了。这就是我当前的代码

    import React, {useState} from 'react';
import { View } from 'react-native';
import * as Font from 'expo-font';
import Home from './screens/Home';
import AppLoading from 'expo';

const getFonts = () => 
   Font.loadAsync({
    "Alef-Bold": require("./assets/fonts/Alef-Bold.ttf")
  })


export default function App() {
  const [fontsLoaded, setFontsLoaded] = useState(false);

  if(fontsLoaded){
    return (
      <View>
        <Home />
      </View>
    );
  } else {
    return (
      <AppLoading startAsync={getFonts} onFinish={() => setFontsLoaded(true)} />
    )
  }
}

这是主页组件

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

function Home() {
    return (
        <View style={styles.container}>
            <Text style={styles.titleText}>Welcome to the home page</Text>
        </View>
    )
}

const styles = StyleSheet.create({
    container: {
        padding: 50,
    },
    titleText: {
        fontFamily: "Alef-Bold",
    }
})

export default Home

那么我该如何解决这个问题呢?

共有1个答案

施飞驰
2023-03-14

您加载字体的方式是错误的,您的导入也是如此。要纠正这一点,只需按照以下步骤操作

点击此处查看工作示例

首先像这样安装AppLoding

expo install expo-app-loading

App.js所在的位置创建一个名为hooks的文件夹。

钩子文件夹内创建一个名为 useFonts 的文件.js粘贴此代码

useFonts.js

import * as Font from 'expo-font';

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

export default useFonts;

然后在您的应用中.js粘贴此代码

import React, { useState } from 'react';
import { View } from 'react-native';
import AppLoading from 'expo-app-loading';

import Home from './screens/Home';
import useFonts from './hooks/useFonts';

export default function App() {
  const [fontsLoaded, setFontsLoaded] = useState(false);

  const LoadFonts = async () => {
    await useFonts(); // We have to await this call here
  };

  if (!fontsLoaded) {
    return (
      <AppLoading
        startAsync={LoadFonts}
        onFinish={() => setFontsLoaded(true)}
        onError={(error) => console.log(error)}
      />
    );
  }

  return (
    <View>
      <Home />
    </View>
  );
}

你的家.js应该是这样的

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

function Home() {
  return (
    <View style={styles.container}>
      <Text style={styles.titleText}>Welcome to the home page</Text>
      <Text style={styles.normalText}>This text is in normal font</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    padding: 50,
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    color: 'red',
  },
  titleText: {
    fontFamily: 'Alef-Bold',
    fontSize: 30,
  },
  normalText: {
    fontSize: 30,
  },
});

export default Home;

通过遵循这种加载字体的方式,您的App.js将整洁干净。我在所有项目中都使用这种方式

 类似资料:
  • 每当我在输入命令npx react native run android后尝试测试应用程序时,就会出现以下错误。我试着在环境变量中设置路径。但仍然不起作用我尝试重新安装react native,但仍然不起作用。我试图从java重新安装JDK,但最后,该应用程序仍然无法在模拟器中运行。感谢您的反馈:) 失败:生成失败,出现异常。 出错的地方:任务执行失败:react-native-community

  • 因此,我得到了一个错误(在底部),很可能是由于我尝试卸载react native pathjs图表引起的。以下问题只存在于android上,而不存在于ios上。 /Users/a.lau/Projects/react-native/First_App/android/app/src/main/java/com/first_app/MainApplication.java: 7:错误:找不到符号导入

  • 我尝试以下代码,但它显示错误消息: 错误消息:- 处理该命令时发生未知的服务器端错误。(警告:服务器未提供任何stacktrace信息)

  • 我很难在fxml/java代码中找到要修复的内容,这就是全部错误: java.lang.reflect.InvocationTargetExctive atsun.reflect.NativemetodAccessorImpl.invoke0(本机方法)atsun.reflect.NativemetodAccessorImpl.invoke(NativemetodAccessorImpl.java

  • 我在playstore有一个11K的应用程序。该应用程序是本地Java的。我做了一个react原生应用程序与相同的包名,并更改了jks密钥到密钥存储文件和更改了版本代码。我正在使用的应用程序存储jks文件,我得到这个错误,我知道通过卸载解决,但我不能告诉用户卸载,有没有其他方式执行失败的任务':app:installrelease'。 com.android.builder.testing.api

  • 我正在尝试使用intelliJ IDEA创建我的第一个JavaFX程序 我得到这个错误: 这是我的FXML文件: main.java: 这是项目结构: 项目结构 我甚至更改了fxml文件的位置,但他不断得到相同的错误。 FXML文件和Main.java在同一个包中 我是Ubuntu