React Nativeジュニア開発者の面接質問と回答

Milad Bonakdar
著者
コンポーネント、Hooks、ナビゲーション、API通信、リスト、AsyncStorage、モバイル基礎を中心にReact Nativeジュニア面接を練習できます。
はじめに
React Nativeのジュニア面接では、Reactで簡単なモバイル画面を作れるか、ネイティブレンダリングを説明できるか、Hooksで状態を管理できるか、画面遷移、API通信、非機密データのローカル保存を扱えるかがよく見られます。よい回答は実務的です。何を使うのか、いつ避けるのか、iOSとAndroidでどんなトレードオフがあるのかを説明しましょう。
このガイドでは、初めてのReact Native職で出やすい質問を練習できます。ライブラリの細かい暗記よりも、Reactの基礎、主要コンポーネント、ナビゲーション、フォーム、リスト、API通信、ストレージ、モバイルのデバッグに集中しましょう。
Reactの基礎 (6つの質問)
1. React Nativeとは何ですか?Reactとの違いは何ですか?
回答:
- React: Webユーザーインターフェースを構築するためのJavaScriptライブラリ
- React Native: Reactを使用してネイティブモバイルアプリを構築するためのフレームワーク
- 主な違い:
- React Nativeは(DOMではなく)ネイティブコンポーネントにレンダリングする
- Web APIの代わりにネイティブAPIを使用する
- スタイリングのアプローチが異なる(CSSがなく、StyleSheetを使用する)
- iOSとAndroidでプラットフォーム固有のコードを使用する
希少度: 非常に一般的 難易度: 簡単
2. React Nativeのコアコンポーネントは何ですか?
回答: React Nativeは、ネイティブUI要素にマッピングされる組み込みコンポーネントを提供します。
- View: コンテナコンポーネント(Webの
divのようなもの) - Text: テキストを表示(すべてのテキストは
Textコンポーネント内にある必要がある) - Image: 画像を表示
- ScrollView: スクロール可能なコンテナ
- TextInput: テキスト入力フィールド
- TouchableOpacity/Pressable: タッチ可能な要素
- FlatList: 効率的なリストレンダリング
- Button: 基本的なボタンコンポーネント
希少度: 非常に一般的 難易度: 簡単
3. ViewとScrollViewの違いを説明してください。
回答:
- View: 静的なコンテナ。画面の境界を超えるコンテンツはスクロールできません。
- ScrollView: スクロール可能なコンテナ。すべての子を一度にレンダリングします(大きなリストではメモリを大量に消費する可能性があります)。
- 使用するタイミング:
- View: 画面に収まるレイアウトの場合
- ScrollView: スクロール可能なコンテンツが少量の場合
- FlatList: 大きなリストの場合(表示されているアイテムのみをレンダリングします)
希少度: 非常に一般的 難易度: 簡単
4. Reactフックとは何ですか?最も一般的に使用されるものはどれですか?
回答: フックは、関数コンポーネントで状態とライフサイクルの機能を使用できるようにする関数です。
- 一般的なフック:
- useState: コンポーネントの状態を管理
- useEffect: 副作用を処理(データフェッチ、サブスクリプション)
- useContext: コンテキスト値にアクセス
- useCallback: 関数をメモ化
- useMemo: 高価な計算をメモ化
- useRef: DOM要素を参照するか、値を永続化
希少度: 非常に一般的 難易度: 簡単
5. useEffectフックとその依存配列について説明してください。
回答:
useEffectは、レンダリング後に副作用を実行します。依存配列は、いつ実行するかを制御します。
- 配列なし: すべてのレンダリング後に実行
- 空の配列
[]: 最初のレンダリング後に一度実行 - 依存関係あり
[dep1, dep2]: 依存関係が変更されたときに実行
希少度: 非常に一般的 難易度: 中程度
6. 仮想DOMとは何ですか?Reactはどのように使用しますか?
回答: Virtual DOMはWeb版Reactの概念です。Reactは軽量なUIツリーを保持し、状態変更後に差分を比較して、変わった部分だけを更新します。React Nativeでも同じreconciliationの考え方は使われますが、最終的な出力はブラウザDOMではなくネイティブビューです。
- 面接で伝えるポイント:
- 状態が変わると、影響を受けるコンポーネントが再レンダリングされる
- Reactが新しいコンポーネントツリーと前のツリーを比較する
- React Nativeが必要な更新をネイティブUIコンポーネントに適用する
- 安定したkey、適切なstate配置、必要な場合だけのメモ化で最適化する
- 重要な補足: React NativeはHTMLやブラウザDOMを更新しません。
希少度: 一般的 難易度: 簡単
コンポーネントとプロパティ (4つの質問)
7. PropsとStateの違いは何ですか?
回答:
- Props:
- 親から子に渡される
- 読み取り専用(不変)
- コンポーネントの構成に使用
- State:
- コンポーネント内で管理される
- 可変(変更可能)
- 動的データに使用
希少度: 非常に一般的 難易度: 簡単
8. 関数コンポーネントとクラスコンポーネントの違いは何ですか?
回答:
- 関数コンポーネント:
- よりシンプルな構文
- 状態とライフサイクルにフックを使用
- 現代のReactで推奨
- クラスコンポーネント:
- 古いアプローチ
this.stateとライフサイクルメソッドを使用- まだサポートされていますが、一般的ではありません
希少度: 一般的 難易度: 簡単
9. 子コンポーネントから親コンポーネントにデータを渡すにはどうすればよいですか?
回答: プロパティとして渡されるコールバック関数を使用します。
希少度: 非常に一般的 難易度: 簡単
10. keyプロパティとは何ですか?なぜ重要ですか?
回答:
keyプロパティは、Reactがリスト内でどのアイテムが変更、追加、または削除されたかを識別するのに役立ちます。
- 目的: レンダリングのパフォーマンスを最適化
- 要件: 兄弟間で一意である必要があり、安定している必要があります(リストが変更される可能性がある場合はインデックスを使用しないでください)
希少度: 非常に一般的 難易度: 簡単
スタイリングとレイアウト (3つの質問)
11. React Nativeでコンポーネントをスタイルするにはどうすればよいですか?
回答: React Nativeは、CSSではなくJavaScriptオブジェクトをスタイリングに使用します。
- StyleSheet API: 最適化されたスタイルを作成
- インラインスタイル: 直接的なスタイルオブジェクト(パフォーマンスが低い)
- Flexbox: デフォルトのレイアウトシステム
希少度: 非常に一般的 難易度: 簡単
12. React NativeのFlexboxについて説明してください。
回答: Flexboxは、React Nativeの主要なレイアウトシステムです。
- 主なプロパティ:
- flexDirection:
rowまたはcolumn(デフォルト:column) - justifyContent: 主軸に沿って配置
- alignItems: 交差軸に沿って配置
- flex: 比例サイズ設定
- flexDirection:
希少度: 非常に一般的 難易度: 中程度
13. marginとpaddingの違いは何ですか?
回答:
- Padding: コンポーネントの内側のスペース(コンテンツと境界線の間)
- Margin: コンポーネントの外側のスペース(コンポーネントと隣接要素の間)
希少度: 一般的 難易度: 簡単
ナビゲーション (3つの質問)
14. React Navigationとは何ですか?どのように使用しますか?
回答: React Navigationは、React Nativeで最も人気のあるナビゲーションライブラリです。
- 種類:
- Stack Navigator: 画面スタック(プッシュ/ポップ)
- Tab Navigator: 下部のタブ
- Drawer Navigator: サイドドロワーメニュー
希少度: 非常に一般的 難易度: 中程度
15. 画面間でパラメータを渡すにはどうすればよいですか?
回答:
データには、2番目のパラメータを指定してnavigate関数を使用します。
希少度: 非常に一般的 難易度: 簡単
16. ナビゲーションオプションとは何ですか?ヘッダーをカスタマイズするにはどうすればよいですか?
回答: ナビゲーションオプションは、画面の外観と動作を制御します。
希少度: 一般的 難易度: 簡単
データとストレージ (4つの質問)
17. React NativeでAPIからデータをフェッチするにはどうすればよいですか?
回答:
fetch APIまたはAxiosなどのライブラリを使用します。
希少度: 非常に一般的 難易度: 中程度
18. AsyncStorageとは何ですか?どのように使用しますか?
回答: AsyncStorageは、小さく非機密なデータを保存するための非同期key-valueストレージです。
- 向いている用途: テーマ設定、オンボーディングのフラグ、キャッシュしたJSON、簡単なユーザー設定
- 避ける用途: 認証トークン、APIキー、パスワード、大きなデータセット、複雑なクエリが必要なデータ
- 機密データの場合: iOS KeychainやAndroidの暗号化ストレージなど、保守されているライブラリ経由の安全なストレージを使います
希少度: 非常に一般的 難易度: 簡単
19. FlatListとScrollViewの違いは何ですか?
回答:
- ScrollView:
- すべての子を一度にレンダリング
- 小さなリストに適している
- 大きなリストではメモリを大量に消費する
- FlatList:
- 表示されているアイテムのみをレンダリング(遅延ロード)
- 大きなリストに効率的
- 組み込みの最適化
希少度: 非常に一般的 難易度: 簡単
20. フォームとユーザー入力を処理するにはどうすればよいですか?
回答: 状態を持つ制御されたコンポーネントを使用します。
希少度: 非常に一般的 難易度: 中程度


