【React面接】

【React面接】頻出質問10選と解説

はじめに

Reactは現代のフロントエンド開発で定番で、HTMLやCSSではなくいきなりReactから学習し始めるケースも増えてきています。多くの企業でも活用されており、フロントエンドの募集ではReactの知識と実務経験を求めることも多いです。技術面接では、Reactに関する基本的な概念から実践的な応用方法まで問われることが珍しくありません。
本記事では、面接で頻出のの質問を10個厳選し、各項目ごとに解説と簡潔なコード例を交えながら丁寧に説明します。Reactを学び始めの方にも分かりやすく、なおかつ応用しやすい知識を身につけられるようにまとめています。

1. Reactの特徴と選ばれる理由


ReactはJSXや仮想DOM、コンポーネント指向で効率的なUI開発を可能にします。自由度の高さから、さまざまなツールやライブラリとの組み合わせも容易です。

コード例:Reactの基本的なコンポーネント構成

import React from 'react';
function App() {
  return <h1>Hello, React!</h1>;
}
export default App;

JSXでHTMLのような記述ができるため、直感的なUI構築が可能です。

2. コンポーネントベースアーキテクチャとJSX

コンポーネントでUIを分割することで、再利用性・保守性が向上します。JSXはHTMLとJavaScriptを組み合わせて、ロジックを直接UIに反映しやすくします。

コード例:コンポーネント分割とJSX

function Button({ label }) {
  return <button>{label}</button>;
}

function App() {
  return (
    <div>
      <Button label="Click Me" />
    </div>
  );
}

<Button>コンポーネントを使い回すことでUIパーツを統一的に管理します。

3. 仮想DOM(Virtual DOM)の仕組みとメリット

仮想DOMで差分計算を行い、実DOMの最小限更新を実現します。そのため高速かつスムーズなUIが得られます。

開発者は仮想DOMを直接扱う必要はなく、Reactが自動で最適化できる点がメリットです。

4. 状態管理(State)と一方向データフロー

stateはコンポーネント内部の状態を保持し、一方向データフローで状態変化に応じてUIを自動更新。データの流れが明確で、デバッグや保守が容易です。

コード例:stateを使ったカウンター

import React, { useState } from 'react';
function Counter() {
  const [count, setCount] = useState(0);
  return <button onClick={() => setCount(count + 1)}>Count: {count}</button>;
}

状態更新でUIが自動的に最新化され、一方向データフローで混乱を回避できます。

5. Hooksの登場意義(クラスからの脱却)

Hooksにより、関数コンポーネントでも状態管理やライフサイクル相当の処理が可能です。クラスコンポーネントの複雑性を回避できます。

コード例:useStateで状態管理

// クラスを使わず、関数+useStateで状態を持てる
function Message() {
  const [text, setText] = useState("Hello");
  return <div onClick={() => setText("Hi!")}>{text}</div>;
}

Hooksで関数コンポーネントに柔軟性が追加され、コードがシンプルになります。

6. useState・useEffectフックの使いどころは?

useStateで状態を定義し、useEffectで副作用(データ取得、イベント登録など)を管理します。実行タイミングを制御し、ロジックを分離できます。

コード例:useEffectでデータ取得

import React, { useState, useEffect } from 'react';

function DataFetcher() {
  const [data, setData] = useState(null);
  useEffect(() => {
    fetch('/api/data')
      .then(res => res.json())
      .then(json => setData(json));
  }, []);
  return <div>{data ? JSON.stringify(data) : "Loading..."}</div>;
}

useEffectでマウント時にデータ取得し、useStateで取得データを管理します。

7. コンテキスト(Context)でProp Drilling解消

Contextでグローバルな情報を提供すれば、中間コンポーネントを介さず深い階層の子が直接データを取得可能です。「prop drilling」を防ぎ、コードをすっきり保てます。

コード例:Context使用例

import React, { createContext, useContext } from 'react';
const UserContext = createContext({ name: 'Alice' });

function UserName() {
  const user = useContext(UserContext);
  return <h2>{user.name}</h2>;
}

function App() {
  return (
    <UserContext.Provider value={{ name: "Bob" }}>
      <UserName />
    </UserContext.Provider>
  );
}

UserNameはpropsを経由せず、Contextから直接ユーザー名を取得できます。

8. React RouterによるSPAナビゲーション

React Routerを使えば、ページリロードなしでURLに応じたコンポーネント切り替えが可能です。UX向上とコード構造化が容易になります。

コード例:React Router基本構成

import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';

function App() {
  return (
    <BrowserRouter>
      <nav>
        <Link to="/">Home</Link>
        <Link to="/about">About</Link>
      </nav>
      <Routes>
        <Route path="/" element={<h1>Home Page</h1>} />
        <Route path="/about" element={<h1>About Page</h1>} />
      </Routes>
    </BrowserRouter>
  );
}

URLに応じたコンポーネント描画で、スムーズなSPA体験を実現できます。

9. パフォーマンス最適化(key属性、memo化)

key属性でリスト要素を識別、React.memouseMemoで不要な再レンダリング回避できます。大規模アプリや大量データでも軽快な操作を維持可能です。

コード例:key属性とmemo化

import React, { memo } from 'react';

const ListItem = memo(({ item }) => <li>{item}</li>);

function ItemList({ items }) {
  return <ul>{items.map(item => <ListItem key={item.id} item={item} />)}</ul>;
}

keyで差分レンダリングを最適化し、memoで不要な再描画を削減できます。

10. カスタムフック(Custom Hooks)によるロジック再利用

カスタムフックで状態やロジックを関数として切り出し、複数コンポーネント間で再利用可能です。コードの重複削減と保守性向上に効果的。

コード例:カスタムフック

import { useState } from 'react';

function useInput(initialValue) {
  const [value, setValue] = useState(initialValue);
  return { value, onChange: e => setValue(e.target.value) };
}

function LoginForm() {
  const username = useInput('');
  const password = useInput('');
  return (
    <form>
      <input type="text" {...username} placeholder="Username" />
      <input type="password" {...password} placeholder="Password" />
    </form>
  );
}

共通ロジック(入力管理)をカスタムフック化して簡潔に再利用可能。

まとめ

以上の10個の質問は、技術面接でよく出るReact関連の質問です。
特に、下記の点について問題を紹介しました。

  • なぜReactが業界標準として選ばれるのか
  • コンポーネント・Hooks・Context・Routerを用いた柔軟な開発方法
  • パフォーマンス最適化やコード再利用による保守性向上

これらの問題を練習しておくと、技術面接でのReact関連質問に対して自信を持って回答する足がかりができます。ここで示したコード例を参考に実際のプロジェクトで試してみると、より理解が深まり、本番の面接でも説得力ある説明ができるでしょう。

さらに面接突破率を上げるために、自身の回答を相手に伝える練習を積んでいきましょう。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です