我在 React Native 中遇到了一个令人沮丧的 Expo Router 问题。尽管设置了基于文件的路由,但我仍然收到“不匹配的路由”错误。我的目标是在用户未登录时将其引导至 AuthStack,在登录时将其引导至 MainStack。但是,我始终收到以下错误消息:
嵌套子级中不存在名为“login”的路由:[“(auth)/login”、“_sitemap”、“[...404]”]
这是我的 app/_layout.tsx 文件中的 RootLayout:
export default function RootLayout() {
const user = getUser();
return user ? <MainStack /> : <AuthStack />;
}
这是 AuthStack 文件:
import { Stack } from "expo-router";
const AuthStack = () => {
return (
<Stack initialRouteName="login">
<Stack.Screen name="login" options={{ headerShown: false }} />
</Stack>
);
};
导出默认AuthStack;
文件夹结构如下:
app/
(auth)/
login.tsx
(main)/
home.tsx
_layout.tsx
如果我将屏幕名称更改为“(auth)/登录”,错误就会消失,但随后它只会显示一个带有“不匹配的路由”的屏幕。如何正确配置用户在启动时定向到此屏幕?我尝试在应用程序布局中添加重定向,但随后出现了与之前相同的错误。
我还尝试在 (auth) 中添加 AuthLayout 并在那里添加 AuthStack,但它仍然没有在启动时打开该屏幕并显示不匹配的屏幕。
要诊断您的问题,请尝试使用
在应用程序文件夹的根目录中创建简单的index.tsximport { Text } from "react-native";
export default function Page() {
return <Text>Home page</Text>;
}
并检查不匹配的路由是否消失 - 如果是这样,只需根据您的需要在此文件中创建重定向
import { Redirect } from "expo-router";
const Index = () => {
return <Redirect href="/discussions" />;
};
export default Index;