了解 Expo Router 使用的基于文件的路由约定。
当在 app 目录中创建文件时,它会自动成为应用中的路由。 例如,以下文件将创建以下路由:
/
/home
/settings
/expo
或 /evanbacon
等动态路径页面是通过从 app 目录中的文件导出 React 组件作为默认值来定义的。 从中导出的文件必须使用 .js
、.jsx
、.tsx
、.ts
扩展名之一。
例如,在项目中创建 app 目录,然后在其中创建文件 index.js。 然后,添加以下代码片段:
使用 React Native 的 <Text>
组件在任何平台上渲染文本。
import { Text } from 'react-native';
export default function Page() {
return <Text>Home page</Text>;
}
或者,你可以编写仅限 Web 的 React 组件,例如 <div>
、<p>
等。 但是,这些不会在原生平台上呈现。
export default function Page() {
return <p>Home page</p>;
}
上面的例子匹配了应用和浏览器中的 /
路由。 名为 index 的文件与父目录匹配,并且不添加路径段。 例如,app/settings/index.js 与应用中的 /settings
匹配。
app 目录不支持平台扩展(例如 .ios.js、.native.ts)。 有关详细信息,请参阅 特定于平台的模块。
动态路由与给定网段级别的任何不匹配路径相匹配。
路由 | 匹配的网址 |
---|---|
app/blog/[slug].js | /blog/123 |
app/blog/[...rest].js | /blog/123/settings |
优先级高的路由会先于动态路由进行匹配。 例如,/blog/bacon
将在 blog/[id].js 之前匹配 blog/bacon.js。
可以使用剩余语法 (...
) 在单个路由中匹配多个 slugs。 例如,app/blog/[...id].js 匹配 /blog/123/settings
。
动态段可在页面组件中作为 搜索参数 进行访问。
import { useLocalSearchParams } from 'expo-router';
import { Text } from 'react-native';
export default function Page() {
const { slug } = useLocalSearchParams();
return <Text>Blog post: {slug}</Text>;
}