Reactの面接でよく聞かれる質問

文責 Aaron Cao · 更新

Reactの面接でよく聞かれる質問
まずHooks関連の質問が来ます。useState、useEffectの依存配列、そして古いクロージャです。次にレンダリング関連です。差分検出(reconciliation)、リストにkeyが必要な理由、そしてmemo・useMemo・useCallbackによる再レンダリングの制御です。多くの選考ではライブコーディング課題も加わり、よくあるのはデータ取得とフィルタリングを行うリスト、またはデバウンス付きの検索ボックスです。

まずHooks関連の質問が来ます。useState、useEffectの依存配列、そして古いクロージャです。次にレンダリング関連です。差分検出(reconciliation)、リストにkeyが必要な理由、そしてmemo・useMemo・useCallbackによる再レンダリングの制御です。多くの選考ではライブコーディング課題も加わり、よくあるのはデータ取得とフィルタリングを行うリスト、またはデバウンス付きの検索ボックスです。

Reactのどの概念が最も多く聞かれるか?

Reactの範囲は非常に広く、多くの質問リストはすべての領域を同じ確率で扱っているように見せています。しかし実際はそうではありません。このセクションでは、実際に多くの選考結果を左右する概念を扱うので、本当の出題分布に沿って練習できます。中心となるのは次の4つです。

  • Hooksの仕組み:hooksのルール、useEffectの依存配列に何を入れるか、クリーンアップ関数、そしてeffectやコールバックが古いstateの値を参照してしまう古いクロージャのバグ。
  • レンダリング:何が再レンダリングを引き起こすか、差分検出(reconciliation)がツリーをどう比較するか、そしてリストで安定したkeyが重要な理由。
  • 状態設計:状態のリフトアップ、制御コンポーネントと非制御コンポーネントの違い、そしてcontextと外部ストアのどちらが適するか。
  • パフォーマンス:React.memo、useMemo、useCallback、そしてそれぞれがいつノイズになり、いつ役立つか。

面接官はそれぞれの「なぜ」を掘り下げてきます。keyは一意でなければならないと暗唱するだけでは点数になりません。リストの並び替え時にReactがkeyをどう使うかを説明できるかが問われます。

どんなライブコーディング課題が出るか?

ほとんどのReact選考では、その場で小さなコンポーネントを組み立てる課題が含まれます。繰り返し出題される課題は会社をまたいでほぼ一定です。

  • APIからリストを取得し、描画して、テキストフィルターを追加する。
  • 検索入力にデバウンスを追加し、古くなったリクエストをキャンセルする。
  • バリデーション付きのフォームを、制御された入力で構築する。
  • effectを正しくクリーンアップするカウンターやタイマーを書く。
  • 繰り返されるロジックからカスタムhookを抽出する。

例えば、ミドルレベルのプロダクト職に応募するフロントエンドエンジニアなら、データ取得とフィルタリングのリストを組み立てたあと、ローディング状態、エラー状態、そしてリクエスト中にコンポーネントがアンマウントされた場合の挙動を突っ込まれることになります。選考の勝敗を分けるのはこうした発展部分であり、基本課題自体は前提条件にすぎません。

タイムプレッシャーの中でフォローアップを受けながら繰り返し練習することで、これらは自然に身につきます。模擬面接のページでは、面接官が突っ込んでくる時間制限付きセッションの進め方を扱っています。

シニアレベルのReactの質問はどのようなものか?

シニア向けの選考では、仕組みの理解から判断力へと重心が移ります。状態アーキテクチャに関する質問が出ます。何をコンポーネントのstateに置き、何をストアに置くか、サーバーの状態とUIの状態はどう違うか、そしてキャッシュはどの層に置くか、といった内容です。レンダリングパフォーマンスの質問はより具体的になり、遅い操作の原因の特定、メモ化と再構築のどちらを選ぶか、そしてプロファイラーのフレームグラフの読み方が問われます。

チームがReactの上にフレームワークを使っている場合は、サーバーサイドレンダリングとハイドレーションも登場します。ハイドレーションとは何か、なぜ不一致が起きるのか、そして処理をサーバーに移すことで何が得られるのか、といった内容です。テストに関する質問は戦略が中心で、コンポーネント単位のテストとエンドツーエンドのテストで何をテストすべきかが、特定のライブラリのAPIより重視されます。

面接形式や、フロントエンドの選考が一般的にこれらのラウンドをどう組み立てるかについては、面接タイプのハブで扱っています。

本番で活きる練習をするにはどうすればよいか?

チュートリアルを見るだけでは「見覚えがある」状態にしかならず、「思い出せる」状態にはなりません。そして選考で試されるのは、人に見られながら思い出せるかどうかです。有効な対策は、選考本番と同じ形で繰り返すことです。空のファイルから定番課題を組み立て、書きながら考えを説明し、割り込みの質問を受けても筋道を見失わないようにします。React選考が今でも導入として使う素のJavaScriptの基礎を含め、隣接スタックの問題集は問題集ハブにあります。

正直に言うと、React面接はほぼ常に共有エディタで行われるか、画面自体が見えている状態で行われ、その画面に映るものはすべて面接官に見えます。アシスタントは準備と練習の段階で使うべきもので、画面共有中の本番選考そのもので使うものではありません。正当なライブ利用のために、SubcueAIのオーバーレイは常にローカルのマシン内だけで動作し、通話にボットが参加することもありません。練習セッションのセットアップはチュートリアルページにあります。

よくある質問

クラスコンポーネントについて、まだ知っておく必要がありますか?

読める程度には必要です。今でも多くの本番コードがクラスを使っているため、ライフサイクルメソッドと、それがhooksにどう対応するかを聞かれることはあります。ただし新規コードに関する質問は、ほぼどこでも関数コンポーネントを前提にしています。

hooksに関する質問は実際どこまで深く聞かれますか?

シグネチャの暗記よりずっと深いところまで聞かれます。依存配列が存在する理由、古いクロージャとは何か、その直し方、クリーンアップがいつ実行されるか、そしてstateの更新がなぜバッチ処理されるのか、といった内容です。実際に古いクロージャのバグをデバッグした経験談ひとつのほうが、組み込みhookをすべて暗記するより価値があります。

Next.jsに関する質問はReactの面接に含まれますか?

チームがNext.jsを使っている場合は含まれます。ルーティング、サーバー側でのデータ取得、そしてハイドレーションの基礎です。素のReactを使うチームではほとんど求められず、いずれにせよ選考の結果を左右するのはReactの中心的な質問です。

面接で今でもReduxについて聞かれますか?

APIの暗記テストというより、状態管理についての議論として聞かれます。コンポーネントのstate、context、外部ストアを比較し、それぞれがどんな場面に適するかを説明できることが求められます。特定のライブラリを知っていることより、トレードオフを言語化できることのほうが重要です。

関連する質問

← 詳しく見る: 職種・トピック別の面接質問