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

React Native/Expo导航组件语法错误排查求助

问题分析与解决方案

核心错误原因

你的导航文件命名为index.ts,但其中包含JSX语法(比如<StatusBar>、<SafeAreaProvider>这类标签)。TypeScript默认规则是:只有.tsx扩展名的文件才会被解析为包含JSX的组件文件,.ts文件仅处理纯TypeScript代码,无法识别JSX语法,这就是触发Unexpected token错误的根本原因。

步骤1:修正文件扩展名

将navigation/index.ts重命名为navigation/index.tsx,确保TypeScript能正确解析JSX语法。

步骤2:优化代码逻辑冗余

你的代码中存在重复的isLoaded判断,比如:

{isLoaded &&
    isLoaded && isSignedIn ? <AppStackNavigator /> : isLoaded && <AuthStackNavigator />
}

外层已经判断了isLoaded,内部无需重复校验,可简化为:

{isLoaded && (isSignedIn ? <AppStackNavigator /> : <AuthStackNavigator />)}

修正后的完整代码

import { NavigationContainer, DefaultTheme } from '@react-navigation/native';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { StatusBar } from 'expo-status-bar';
import { useUser } from '@clerk/clerk-expo';

import AppStackNavigator from './Stack/AppStack';
import AuthStackNavigator from './Stack/AuthStackNavigator';
import LoadingComponent from '../components/LoadingComponent';

const Navigation = () => {
    const { isSignedIn, isLoaded } = useUser();

    return (
        <SafeAreaProvider>
            <StatusBar style="light" translucent={true} backgroundColor="transparent" animated />
            <NavigationContainer theme={DefaultTheme} fallback={<LoadingComponent />}>
                {!isLoaded && <LoadingComponent />}
                {isLoaded && (isSignedIn ? <AppStackNavigator /> : <AuthStackNavigator />)}
            </NavigationContainer>
        </SafeAreaProvider>
    );
};

export default Navigation;

额外验证步骤

  • 确认项目tsconfig.json的compilerOptions中包含"jsx": "react-jsx"(Expo项目默认已配置,可检查确认)。
  • 执行expo start --clear清除缓存后重启开发服务器,避免缓存残留影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:36:15