React Academy · レッスン

Expo Routerによるナビゲーション

typed routesとdeep linkingに対応したfile-based navigationのためにExpo Routerを設定します。

レッスン 3/413 ステップ

「Expo Routerによるナビゲーション」はCoddyKit上の無料React Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

Expo Routerとは

Expo Routerは、React Native向けのファイルベースのルーティングライブラリです(React Navigationを基盤としています)。Next.jsのApp Routerと同様に、ファイル構成によってナビゲーションのルートが定義されます。

インストール

Expo Routerがあらかじめ設定された新しいExpoプロジェクトを作成します。

# Create new project:
npx create-expo-app@latest my-app --template tabs

# Or add to existing Expo project:
npx expo install expo-router react-native-safe-area-context react-native-screens

ファイルベースのルート

app/ディレクトリ内のファイルは、自動的にルートになります。index.tsxはルート画面、[id].tsxは動的セグメントです。

app/
  _layout.tsx       # root layout (Stack navigator)
  index.tsx          # → / (home screen)
  profile.tsx        # → /profile
  posts/
    _layout.tsx      # posts stack layout
    index.tsx        # → /posts
    [id].tsx         # → /posts/123 (dynamic)

ルートレイアウト

ルートの_layout.tsxは、すべての画面をプロバイダーでラップし、最上位のナビゲーターを定義します。

// app/_layout.tsx
import { Stack } from 'expo-router';

export default function RootLayout() {
  return (
    <Stack>
      <Stack.Screen name="index" options={{ title: 'Home' }} />
      <Stack.Screen name="profile" options={{ title: 'Profile' }} />
    </Stack>
  );
}

Linkを使ったナビゲーション

expo-routerのLinkコンポーネントを使うと、宣言的なナビゲーションを実装できます。next/linkと似た仕組みです。

import { Link } from 'expo-router';

function HomeScreen() {
  return (
    <Link href="/profile">Go to Profile</Link>
  );
}

useRouterを使ったナビゲーション

useRouter()を使うと、命令的なナビゲーションを実装できます。プログラムから画面を追加したり、置き換えたり、戻ったりできます。

import { useRouter } from 'expo-router';

function LoginForm() {
  const router = useRouter();

  async function handleLogin() {
    await login();
    router.replace('/dashboard');
  }
}

動的ルート

動的ルートファイル内でuseLocalSearchParams()を使うと、ルートパラメーターにアクセスできます。

// app/posts/[id].tsx
import { useLocalSearchParams } from 'expo-router';

export default function PostScreen() {
  const { id } = useLocalSearchParams<{ id: string }>();
  return <PostDetail postId={id} />;
}

タブナビゲーション

グループレイアウト内でexpo-routerのTabsを使うと、画面下部のタブナビゲーションを実装できます。

// app/(tabs)/_layout.tsx
import { Tabs } from 'expo-router';

export default function TabLayout() {
  return (
    <Tabs>
      <Tabs.Screen name="index" options={{ title: 'Home', tabBarIcon: ({ color }) => <HomeIcon color={color} /> }} />
      <Tabs.Screen name="explore" options={{ title: 'Explore' }} />
    </Tabs>
  );
}

モーダル画面

Stack.Screenのオプションでpresentation: 'modal'を設定すると、画面をモーダルとして表示できます。

// app/_layout.tsx
<Stack.Screen name="modal" options={{ presentation: 'modal', title: 'Settings' }} />

// Navigate to modal:
router.push('/modal');

ディープリンク

Expo Routerはディープリンクを自動的に処理します。app.jsonでURLスキームを定義すると、myapp://posts/123のようなリンクから正しい画面を開けます。

// app.json
{
  "expo": {
    "scheme": "myapp"
  }
}

認証パターン

認証状態に応じて認証画面またはアプリのタブを条件付きで表示するルートレイアウトを使います。

// app/_layout.tsx
import { Redirect } from 'expo-router';

function RootLayout() {
  const { user } = useAuth();
  if (!user) return <Redirect href="/login" />;
  return <Stack />;
}

理解度チェック

/posts/[id]のidのような動的ルートパラメーターを読み取るExpo Routerのフックはどれですか。

まとめ

Expo Routerはファイルベースのルーティングを使用します。app/index.tsxはホーム、app/[id].tsxは動的ルートに対応します。_layout.tsxでレイアウトを定義し、LinkまたはuseRouter()で移動し、useLocalSearchParams()でパラメーターを読み取ります。

無料で開始

AI チューターと学ぶ React — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
88
レッスン
324

よくある質問

「Expo Routerによるナビゲーション」レッスンは無料ですか?

はい。「Expo Routerによるナビゲーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「Expo Routerによるナビゲーション」で何を学びますか?

typed routesとdeep linkingに対応したfile-based navigationのためにExpo Routerを設定します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Expo Routerによるナビゲーション」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. React Native Core ComponentsとWeb DOMの比較
  2. StyleSheet APIとFlexboxによるスタイリング
  3. Expo Routerによるナビゲーション
  4. Device APIへのアクセス:Camera、Location、Push Notifications
← React Academyに戻る