0Pricing
React Native Academy · レッスン

ドロワーナビゲーターとネストしたナビゲーター

ドロワーナビゲーターを設定し、その画面の1つにスタックをネストして、ネストしたナビゲーターがヘッダーや戻るボタンとどのように連携するかを理解します

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

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

What is a Drawer Navigator?

A drawer navigator shows a slide-out side menu (drawer) that the user can open by swiping from the left edge or tapping a hamburger icon. It is ideal for apps with many top-level sections that do not fit in a tab bar. React Navigation provides it via the @react-navigation/drawer package.

Installing the Drawer Package

The drawer navigator requires additional gesture and animation libraries. Install the drawer package and its peer dependencies. The drawer relies on react-native-gesture-handler and react-native-reanimated for smooth animations.

npm install @react-navigation/drawer
npx expo install react-native-gesture-handler react-native-reanimated

Configuring Reanimated Babel Plugin

React Native Reanimated requires a Babel plugin to work. Add 'react-native-reanimated/plugin' as the last entry in your babel.config.js plugins array. Restart Metro bundler after making this change to clear the cache.

// babel.config.js
module.exports = function(api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
    plugins: ['react-native-reanimated/plugin'],
  };
};

Creating a Drawer Navigator

Use createDrawerNavigator() and register screens with Drawer.Screen components. Each screen appears as a menu item in the drawer. The drawer also renders a header with a hamburger menu icon that opens the drawer when tapped.

import { createDrawerNavigator } from '@react-navigation/drawer';

const Drawer = createDrawerNavigator();

function MyDrawer() {
  return (
    <Drawer.Navigator initialRouteName='Home'>
      <Drawer.Screen name='Home' component={HomeScreen} />
      <Drawer.Screen name='Settings' component={SettingsScreen} />
      <Drawer.Screen name='About' component={AboutScreen} />
    </Drawer.Navigator>
  );
}

Opening and Closing the Drawer

From any screen inside the drawer navigator, call navigation.openDrawer() to open the side menu, navigation.closeDrawer() to close it, and navigation.toggleDrawer() to toggle between open and closed. Users can also swipe from the edge or tap the backdrop to close it.

function HomeScreen({ navigation }) {
  return (
    <Button
      title='Open Menu'
      onPress={() => navigation.openDrawer()}
    />
  );
}

Customizing Drawer Screen Options

Use the drawerIcon option on each Drawer.Screen to add an icon next to the menu item. Use drawerLabel to override the display name. These options follow the same pattern as tab navigator options, giving you a consistent API across navigators.

<Drawer.Screen
  name='Home'
  component={HomeScreen}
  options={{
    drawerLabel: 'Dashboard',
    drawerIcon: ({ color, size }) => (
      <Ionicons name='home-outline' size={size} color={color} />
    ),
  }}
/>

What Are Nested Navigators?

Nested navigators occur when you place one navigator inside a screen of another navigator. For example, a drawer navigator can contain a tab navigator, which can itself contain stack navigators inside each tab. This is how complex apps structure their navigation hierarchy.

Nesting a Stack Inside a Drawer Screen

To give each drawer section its own navigation history, use a Stack.Navigator as the component for a Drawer.Screen. The stack's header and the drawer header may conflict — set headerShown: false on the drawer to hide its header and rely on the stack header.

function HomeStack() {
  return (
    <Stack.Navigator>
      <Stack.Screen name='Home' component={HomeScreen} />
      <Stack.Screen name='Details' component={DetailsScreen} />
    </Stack.Navigator>
  );
}

<Drawer.Screen
  name='HomeSection'
  component={HomeStack}
  options={{ headerShown: false }}
/>

Navigation Across Nested Navigators

When navigating across nested navigators (e.g., from a screen inside a tab to a screen in another tab's stack), use the full screen name and navigator target. React Navigation resolves the correct navigator. You may also navigate to a parent navigator's screen using navigation.navigate('ParentScreen', { screen: 'ChildScreen' }).

// Navigate to a screen nested inside a different tab
navigation.navigate('ProfileTab', {
  screen: 'EditProfile',
  params: { userId: 5 },
});

The Back Button and Nested Stacks

When a stack is nested inside a tab or drawer, the back button in the stack header only pops the stack — it does not switch tabs or close the drawer. Each navigator manages its own history independently. This is intentional and matches the expected behavior users experience in native apps.

Custom Drawer Content

Replace the default drawer menu with a fully custom component using the drawerContent prop on Drawer.Navigator. Your custom component receives navigation and state props and can display a user avatar, subscription info, or any other content above or below the menu items.

function CustomDrawer(props) {
  return (
    <DrawerContentScrollView {...props}>
      <Image source={{ uri: user.avatar }} style={styles.avatar} />
      <Text>{user.name}</Text>
      <DrawerItemList {...props} />
    </DrawerContentScrollView>
  );
}

<Drawer.Navigator drawerContent={(props) => <CustomDrawer {...props} />}>

Quick Check

Test your understanding of Drawer Navigator and nested navigators from this lesson.

Lesson Recap

In this lesson you learned: create a drawer navigator with createDrawerNavigator, open and close the drawer programmatically with navigation.openDrawer/closeDrawer, and nest navigators by using a navigator component as a screen's component prop. Next up we explore the FlatList component for efficiently rendering large data sets.

よくある質問

「ドロワーナビゲーターとネストしたナビゲーター」レッスンは無料ですか?

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

「ドロワーナビゲーターとネストしたナビゲーター」で何を学びますか?

ドロワーナビゲーターを設定し、その画面の1つにスタックをネストして、ネストしたナビゲーターがヘッダーや戻るボタンとどのように連携するかを理解します ブラウザで直接実行するハンズオンコードでReact Native Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ドロワーナビゲーターとネストしたナビゲーター」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. React Navigationのインストールと設定
  2. 画面間の移動とParamsの受け渡し
  3. ボトムタブナビゲーター
  4. ドロワーナビゲーターとネストしたナビゲーター
← React Native Academyに戻る