首页指南参考教程

使用 Expo Router 创建页面

了解 Expo Router 使用的基于文件的路由约定。


当在 app 目录中创建文件时,它会自动成为应用中的路由。 例如,以下文件将创建以下路由:

  • app/index.js 匹配 /
  • app/home.js 匹配 /home
  • app/settings/index.js 匹配 /settings
  • app/[user].js 匹配 /expo/evanbacon 等动态路径

页面

页面是通过从 app 目录中的文件导出 React 组件作为默认值来定义的。 从中导出的文件必须使用 .js.jsx.tsx.ts 扩展名之一。

例如,在项目中创建 app 目录,然后在其中创建文件 index.js。 然后,添加以下代码片段:

使用 React Native 的 <Text> 组件在任何平台上渲染文本。

app/index.js
import { Text } from 'react-native';

export default function Page() {
  return <Text>Home page</Text>;
}

或者,你可以编写仅限 Web 的 React 组件,例如 <div><p> 等。 但是,这些不会在原生平台上呈现。

app/index.js
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

动态段可在页面组件中作为 搜索参数 进行访问。

app/blog/[slug].js
import { useLocalSearchParams } from 'expo-router';
import { Text } from 'react-native';

export default function Page() {
  const { slug } = useLocalSearchParams();

  return <Text>Blog post: {slug}</Text>;
}
Expo 中文网 - 粤ICP备13048890号