You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用expo-font加载Poppins-Medium字体报错的原因求助

排查React Native + Expo项目字体加载失败问题

以下是针对你遇到的fontFamily "Poppins-Medium" is not a system font and has not been loaded through Font.loadAsync报错的逐一排查方向:

1. 字体文件路径与命名检查

  • 确保fontLoader.js中字体文件的相对路径正确,比如字体文件放在assets/fonts/目录下时,路径应为require('../assets/fonts/Poppins-Medium.ttf'),注意大小写敏感(iOS系统会严格区分文件名大小写)。
  • 检查字体文件名是否和代码中引用的一致,避免出现Poppins-Medium.ttf写成PoppinsMedium.ttf这类拼写错误。

2. Font.loadAsync键名与使用时的fontFamily完全匹配

fontLoader.js中定义的字体键名必须和组件中使用的fontFamily字符串完全一致,示例:

// fontLoader.js 正确写法
import * as Font from 'expo-font';

export const loadFonts = async () => {
  await Font.loadAsync({
    'Poppins-Medium': require('../assets/fonts/Poppins-Medium.ttf'),
    // 其他字体需保持相同的键名-路径对应规则
  });
};

组件中使用时必须严格对应:

// OnboardingScreen.js 正确写法
style={{
  fontFamily: 'Poppins-Medium', // 和fontLoader中的键名完全一致
  fontSize: 16
}}

3. 确保字体加载完成后再渲染页面

App.js中需通过状态控制,等待字体加载完成后再渲染使用该字体的组件,避免提前渲染导致报错:

// App.js 正确示例
import { useState, useEffect } from 'react';
import { ActivityIndicator } from 'react-native';
import { loadFonts } from './fontLoader';
import OnboardingScreen from './OnboardingScreen';

export default function App() {
  const [isFontsLoaded, setIsFontsLoaded] = useState(false);

  useEffect(() => {
    const init = async () => {
      try {
        await loadFonts();
        setIsFontsLoaded(true);
      } catch (err) {
        console.error('字体加载失败:', err);
      }
    };
    init();
  }, []);

  // 未加载完成时显示加载指示器
  if (!isFontsLoaded) {
    return <ActivityIndicator size="large" />;
  }

  return <OnboardingScreen />;
}

4. 检查依赖版本兼容性

查看package.json中expo和expo-font的版本是否兼容,不同Expo SDK版本对应特定的expo-font版本范围。可以尝试重新安装依赖:

npm install expo-font --save
# 或使用yarn
yarn add expo-font

5. 验证字体文件有效性

尝试重新下载Poppins-Medium.ttf字体文件,确保文件未损坏。可以将字体文件在本地系统中打开,确认能正常显示字体样式。

内容的提问来源于stack exchange,提问作者TM12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:17:29