求助:解决Expo Go应用空白白屏且无响应问题
Expo Go安卓端白屏无响应(次日启动触发)排查与解决
问题概述
跟着YouTube上JavaScript Mastery的《Build and Deploy a React Native App》教程开发时,第三次遇到安卓Expo Go启动后完全白屏、无法通过摇唤打开设置、应用无响应的问题。特征如下:
- 前一天开发结束时应用运行正常,次日打开必现问题
- VS Code无编译报错,打包流程正常完成
- 已将react-native版本从0.73.2升级至0.73.4适配Expo 50.0.1,问题仍未解决
- 曾通过重写项目解决过一次,但问题复发
排查步骤与解决方案
1. 清除Expo缓存(优先尝试)
这类跨天出现的问题大概率是缓存堆积导致:
- 终端执行命令:
expo r -c(重启开发服务器并清除所有缓存) - 安卓端操作:打开Expo Go,长按项目卡片选择「Remove from Recents」,再重新扫码加载项目
2. 修复字体加载容错逻辑(针对你的_layout.js)
当前代码中如果字体加载失败会直接返回null,导致完全白屏。修改_layout.js添加加载状态提示与错误处理:
import { Stack, View, Text } from "expo-router"; import { useCallback, useEffect } from "react"; import { useFonts } from "expo-font"; import * as SplashScreen from "expo-splash-screen"; SplashScreen.preventAutoHideAsync(); const Layout = () => { // 接收字体加载错误状态 const [fontsLoaded, fontError] = useFonts({ DMBold: require("../assets/fonts/DMSans-Bold.ttf"), DMMedium: require("../assets/fonts/DMSans-Medium.ttf"), DMRegular: require("../assets/fonts/DMSans-Regular.ttf"), }); const onLayoutRootView = useCallback(async () => { if (fontsLoaded) { await SplashScreen.hideAsync(); } }, [fontsLoaded]); // 处理字体加载失败的情况 useEffect(() => { if (fontError) { console.error("字体加载失败:", fontError); // 强制隐藏闪屏,避免卡住 SplashScreen.hideAsync(); } }, [fontError]); // 字体加载中显示占位UI,而非返回null if (!fontsLoaded && !fontError) { return ( <View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}> <Text>加载中...</Text> </View> ); } return <Stack onLayout={onLayoutRootView} />; }; export default Layout;
同时检查:
- 字体文件路径是否正确(
../assets/fonts/需对应实际文件位置) - 文件名是否完全匹配(安卓系统对文件名大小写敏感)
3. 检查资源引用与路由配置
- Welcome.jsx:确认
../../../constants路径下的icons.search图片存在、格式为Expo支持的类型(png/jpg等);检查SIZES.small是否正确定义,未定义会导致样式报错引发白屏 - 路由结构:确认项目根目录下存在
app文件夹,_layout.js位于app内,Welcome.jsx的位置对应Expo Router的默认路由(如app/index.jsx)
4. 捕获隐性运行时错误
虽然VS Code无编译报错,仍可能存在运行时错误:
- 执行
expo start --clear重启服务器 - 终端按
d打开调试菜单,选择「Debug Remote JS」 - Chrome会打开调试面板,查看Console标签页的错误信息(即使应用白屏,远程调试仍能捕获错误)
5. 检查设备网络状态
确保安卓手机与开发电脑在同一局域网内,Expo Go需与开发服务器建立稳定连接,网络波动可能导致加载失败
代码小修正(非核心但需注意)
Welcome.jsx中搜索框placeholder拼写错误:将What are you lookingfor?改为What are you looking for?
内容的提问来源于stack exchange,提问作者madbater
相关产品推荐
相关产品推荐

