カテゴリ: React 更新日: 2025/12/28

Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説

フォーカスイベント(onFocus, onBlur)の制御方法
フォーカスイベント(onFocus, onBlur)の制御方法

先生と生徒の会話形式で理解しよう

生徒

「Reactで入力欄にフォーカスしたときや離れたときに処理をしたいです。」

先生

「それならonFocusonBlurというイベントハンドラを使います。」

生徒

「具体的にはどんなタイミングで反応するんですか?」

先生

onFocusは入力欄やボタンなどの要素が選択されたときに発火し、onBlurは要素からフォーカスが外れたときに発火します。」

生徒

「なるほど、では実際に使ってみたいです。」

先生

「それではサンプルコードで確認してみましょう。」

1. onFocusとonBlurの基本的な使い方

1. onFocusとonBlurの基本的な使い方
1. onFocusとonBlurの基本的な使い方

Reactでは、入力欄やボタンなどにonFocusonBlurを設定することで、フォーカスの開始と終了を検知できます。フォーカスとは、ユーザーが入力欄やボタンなどを選択して操作できる状態になることを指します。


import React, { useState } from "react";

function App() {
  const [focused, setFocused] = useState(false);

  return (
    <div>
      <input
        onFocus={() => setFocused(true)}
        onBlur={() => setFocused(false)}
        placeholder="ここに入力してみてください"
        style={{ padding: "8px", fontSize: "16px" }}
      />
      <p>{focused ? "入力欄にフォーカスがあります" : "入力欄からフォーカスが外れています"}</p>
    </div>
  );
}

export default App;
(入力欄をクリックするとフォーカスが入り、背景でメッセージが「入力欄にフォーカスがあります」に変わり、外れると元に戻ります)

2. 実践的な活用例:フォーカス時のスタイル変更

2. 実践的な活用例:フォーカス時のスタイル変更
2. 実践的な活用例:フォーカス時のスタイル変更

フォーカスイベントを使うと、入力欄の背景色や枠線の色を変えるなど、ユーザーに視覚的なフィードバックを提供できます。onFocusでフォーカスが入ったときに色を変え、onBlurで元に戻すと、直感的に操作できるUIを作れます。


import React, { useState } from "react";

function App() {
  const [focused, setFocused] = useState(false);

  return (
    <div>
      <input
        onFocus={() => setFocused(true)}
        onBlur={() => setFocused(false)}
        placeholder="フォーカスで色が変わります"
        style={{
          padding: "8px",
          fontSize: "16px",
          border: "1px solid #000",
          backgroundColor: focused ? "lightyellow" : "white"
        }}
      />
    </div>
  );
}

export default App;
(入力欄にフォーカスすると背景色が黄色に変わり、フォーカスを外すと白に戻ります)

3. 注意点と応用

3. 注意点と応用
3. 注意点と応用

フォーカスイベントは、フォームの入力チェックやUIのアクセシビリティ向上に役立ちます。例えば、必須入力欄にフォーカスしたときにヒントを表示したり、入力後にバリデーションを行ったりすることができます。Reactでフォームを作るときは、onFocusonBlurを組み合わせることで、より親切で使いやすいユーザーインターフェースを提供できます。

注意点として、フォーカスイベントはキーボード操作でも発火するため、マウスだけでなくタブキーなどの操作にも対応していることを理解しておくと良いでしょう。

4. フォーカスイベントとフォームバリデーションの組み合わせ

4. フォーカスイベントとフォームバリデーションの組み合わせ
4. フォーカスイベントとフォームバリデーションの組み合わせ

ReactのonFocusonBlurは、入力欄にフォーカスが当たったときや外れたときに発火します。この特性を活かして、フォームバリデーションと組み合わせることができます。例えば、必須入力欄にフォーカスが当たったときにヒントを表示し、onBlurで入力内容をチェックしてエラー表示するなど、ユーザーに優しい入力支援が可能です。


import React, { useState } from "react";

function App() {
  const [focused, setFocused] = useState(false);
  const [value, setValue] = useState("");

  return (
    <div>
      <input
        value={value}
        onFocus={() => setFocused(true)}
        onBlur={() => setFocused(false)}
        onChange={e => setValue(e.target.value)}
        placeholder="必須入力欄"
        style={{
          padding: "8px",
          fontSize: "16px",
          border: "1px solid #000",
          backgroundColor: focused ? "lightblue" : "white"
        }}
      />
      <p>
        {focused ? "入力欄がアクティブです" : value === "" ? "入力してください" : "入力完了"}
      </p>
    </div>
  );
}

export default App;
(入力欄にフォーカスが当たると青くなり、フォーカスを外すと入力状態に応じてメッセージが変化します)

5. 複数入力欄でのフォーカス管理

5. 複数入力欄でのフォーカス管理
5. 複数入力欄でのフォーカス管理

複数の入力欄がある場合、それぞれにonFocusonBlurを設定することで、どの入力欄が現在アクティブかを判定できます。フォーム全体のUXを向上させるために、フォーカス状態に応じたハイライトや補助メッセージの表示に活用できます。


import React, { useState } from "react";

function App() {
  const [focusIndex, setFocusIndex] = useState(null);

  return (
    <div>
      {["名前", "メール", "パスワード"].map((label, index) => (
        <div key={index}>
          <input
            placeholder={label}
            onFocus={() => setFocusIndex(index)}
            onBlur={() => setFocusIndex(null)}
            style={{
              padding: "8px",
              fontSize: "16px",
              border: "1px solid #000",
              backgroundColor: focusIndex === index ? "lightgreen" : "white",
              marginBottom: "8px"
            }}
          />
        </div>
      ))}
    </div>
  );
}

export default App;
(どの入力欄にフォーカスがあるかを判定して背景色を変更し、ユーザーに視覚的なフィードバックを提供します)

6. フォーカスイベントのアクセシビリティ対応

6. フォーカスイベントのアクセシビリティ対応
6. フォーカスイベントのアクセシビリティ対応

フォーカスイベントはキーボード操作でも発火するため、アクセシビリティに対応したフォーム設計が可能です。タブキーでの移動時にもonFocusonBlurが正しく発火することを確認し、視覚的にフォーカス状態を分かりやすくすることで、すべてのユーザーに使いやすいUIを提供できます。


import React, { useState } from "react";

function App() {
  const [focusedInput, setFocusedInput] = useState("");

  return (
    <div>
      <input
        placeholder="ユーザー名"
        onFocus={() => setFocusedInput("ユーザー名")}
        onBlur={() => setFocusedInput("")}
        style={{
          padding: "8px",
          fontSize: "16px",
          border: "1px solid #000",
          backgroundColor: focusedInput === "ユーザー名" ? "lightpink" : "white",
          marginBottom: "8px"
        }}
      />
      <input
        placeholder="メールアドレス"
        onFocus={() => setFocusedInput("メールアドレス")}
        onBlur={() => setFocusedInput("")}
        style={{
          padding: "8px",
          fontSize: "16px",
          border: "1px solid #000",
          backgroundColor: focusedInput === "メールアドレス" ? "lightpink" : "white"
        }}
      />
    </div>
  );
}

export default App;
(タブキーで入力欄を移動すると、フォーカスがある入力欄の背景色が変わり、キーボード操作でも視覚的に分かりやすくなります)

まとめ

まとめ
まとめ

今回の記事では、ReactにおけるフォーカスイベントonFocusonBlurの基本的な使い方から応用までを学びました。onFocusは入力欄やボタンなどの要素が選択された瞬間に発火し、onBlurはフォーカスが外れたときに発火するイベントです。これらを利用することで、ユーザーの操作に応じた動的なUIを簡単に実現できます。例えば、入力欄にフォーカスした際に背景色を変える、フォーカスが外れたら元に戻すといった視覚的なフィードバックは、ユーザーにとって直感的で操作しやすいフォームを作るうえで非常に有効です。

ReactではuseStateを組み合わせることで、フォーカスの状態をコンポーネント内で管理できます。また、入力欄にフォーカスがあるかどうかの状態を表示したり、条件に応じてスタイルを変更することも簡単に行えます。さらに、フォームの入力チェックやアクセシビリティの向上にも役立つため、onFocusonBlurを活用することで、よりユーザーに優しいインターフェースを提供できます。

注意点として、フォーカスイベントはマウス操作だけでなくキーボード操作でも発火することを理解しておく必要があります。タブキーでの移動やEnterキーでの操作も考慮することで、全てのユーザーに対応したフォーム設計が可能です。また、onFocusonBlurは、入力欄だけでなくボタンやセレクトボックスなど多様なフォーム要素に適用できるため、応用範囲が広いのも特徴です。

サンプルプログラムで復習

import React, { useState } from "react";

function App() {
  const [focused, setFocused] = useState(false);

  return (
    <div>
      <input
        onFocus={() => setFocused(true)}
        onBlur={() => setFocused(false)}
        placeholder="フォーカスで色やメッセージが変わります"
        style={{
          padding: "8px",
          fontSize: "16px",
          border: "1px solid #000",
          backgroundColor: focused ? "lightyellow" : "white"
        }}
      />
      <p>
        {focused ? "入力欄にフォーカスがあります" : "入力欄からフォーカスが外れています"}
      </p>
    </div>
  );
}

export default App;
(入力欄にフォーカスすると背景色が黄色に変わり、メッセージも「入力欄にフォーカスがあります」に変化。フォーカスを外すと元に戻ります)
先生と生徒の振り返り会話

生徒

「ReactのonFocusonBlurで、入力欄やボタンの状態に応じて動きを変えられるのが理解できました。」

先生

「その通りです。フォーカスが入ったかどうかを状態として管理することで、背景色やメッセージを変更したり、ヒントやバリデーションを表示したりできます。」

生徒

「マウス操作だけでなくキーボードでもイベントが発火するので、アクセシビリティ対応も意識できるんですね。」

先生

「その通りです。タブキーでの移動やEnterキーの操作も考慮すると、全てのユーザーにとって使いやすいフォームになります。Reactでのフォーカスイベントは非常に実践的で便利な仕組みです。」

生徒

「背景色やメッセージだけでなく、フォーム入力の補助やバリデーションにも活用できるんですね。」

先生

「そうです。onFocusonBlurを上手に使えば、直感的でわかりやすいUIを簡単に作れるようになります。Reactのフォーム制御の基本としてぜひ覚えておきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

ReactでonFocusとは何ですか?どんな場面で使うのですか?

ReactのonFocusは、入力欄やボタンなどの要素にフォーカス(選択)が当たったときに実行されるイベントハンドラで、ユーザーが要素を操作可能になった瞬間に使われます。
カテゴリの一覧へ
新着記事
New1
React
Reactコンポーネントの再利用と分割を完全マスター!初心者でもわかるコンポーネント設計
New2
React
ReactでAxiosインターセプターの使い方を完全ガイド!初心者でもわかるリクエストとレスポンスの処理方法
New3
React
JSXの書き方!初心者でもわかるReactタグと属性の基本ルール解説
New4
React
ReactとDockerを使った開発環境構築の基本を徹底解説!初心者でもわかるReactとDockerの連携方法
人気記事
No.1
Java&Spring記事人気No1
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.3
Java&Spring記事人気No3
React
Reactのイベントハンドリングのアンチパターンまとめ!初心者でもわかる注意点
No.4
Java&Spring記事人気No4
React
Reactのカスタムフックの作り方を完全ガイド!再利用可能なロジックを切り出す仕組み
No.5
Java&Spring記事人気No5
React
ReactでFetch APIのローディング状態を管理する方法|初心者にもわかる解説
No.6
Java&Spring記事人気No6
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.8
Java&Spring記事人気No8
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介