useState Hookを使って、ReactJSで入力欄が空のときボタンを無効にする方法

2024-04-02

ReactJSで入力欄が空のときボタンを無効にする方法

useState Hookを使う方法

この方法は、useState Hookを使って入力欄の状態を管理し、その状態に基づいてボタンの有効無効を切り替えます。

コード例

import React, { useState } from 'react';

function App() {
  const [inputValue, setInputValue] = useState('');

  const handleInputChange = (event) => {
    setInputValue(event.target.value);
  };

  return (
    <div>
      <input
        type="text"
        value={inputValue}
        onChange={handleInputChange}
      />
      <button disabled={!inputValue}>送信</button>
    </div>
  );
};

export default App;

解説

  • useState Hookを使って、inputValueという状態変数を初期値''で初期化しています。
  • handleInputChange関数では、入力欄の値が変更されたときに呼び出され、inputValue状態変数を更新します。
  • button要素のdisabled属性には、!inputValueという式を指定しています。これは、inputValueが空のときはtrueになり、ボタンが無効になることを意味します。

refを使う方法

この方法は、refを使って入力欄のDOM要素を取得し、その要素のvalueプロパティをチェックすることで、ボタンの有効無効を切り替えます。

import React, { useRef } from 'react';

function App() {
  const inputRef = useRef();

  const handleButtonClick = () => {
    if (inputRef.current.value === '') {
      return;
    }
    // ボタンが押されたときの処理
  };

  return (
    <div>
      <input
        type="text"
        ref={inputRef}
      />
      <button onClick={handleButtonClick}>送信</button>
    </div>
  );
};

export default App;
  • button要素のonClick属性には、handleButtonClick関数を指定しています。
  • handleButtonClick関数では、inputRef.current.valueプロパティをチェックして、空のときは処理を中止します。

どちらの方法でも同じ結果が得られますが、どちらを使うべきかは状況によって異なります。

  • 入力欄の状態を他のコンポーネントでも使用したい場合は、useState Hookを使う方が良いでしょう。
  • 入力欄の状態を他のコンポーネントで使用しない場合は、refを使う方がシンプルで済みます。

ReactJSで入力欄が空のときボタンを無効にする方法はいくつかあります。状況に合わせて適切な方法を選びましょう。




import React, { useState } from 'react';

function App() {
  const [inputValue, setInputValue] = useState('');

  const handleInputChange = (event) => {
    setInputValue(event.target.value);
  };

  return (
    <div>
      <input
        type="text"
        value={inputValue}
        onChange={handleInputChange}
      />
      <button disabled={!inputValue}>送信</button>
    </div>
  );
};

export default App;

実行方法

  1. 上記のコードをファイルに保存します。
  2. ファイルをindex.jsという名前で保存します。
  3. 以下のコマンドを実行して、プロジェクトを作成します。
npm init -y
npm install react react-dom
npm start
  1. ブラウザでhttp://localhost:3000を開きます。

入力欄が空のときボタンが無効になっていることを確認

  1. 入力欄に何も入力せずに、送信ボタンをクリックします。
  2. ボタンが無効になっていることを確認します。

入力欄に値を入力して、ボタンが有効になることを確認

  1. 入力欄に値を入力します。
  2. 送信ボタンをクリックします。



入力欄が空のときボタンを無効にするその他の方法

useEffect Hookを使う方法

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

function App() {
  const [inputValue, setInputValue] = useState('');

  useEffect(() => {
    const button = document.querySelector('button');
    button.disabled = !inputValue;
  }, [inputValue]);

  return (
    <div>
      <input
        type="text"
        value={inputValue}
        onChange={(event) => setInputValue(event.target.value)}
      />
      <button>送信</button>
    </div>
  );
};

export default App;
  • useEffect Hookを使って、inputValue状態変数が変化したときにbutton要素のdisabled属性を設定しています。

カスタムフックを使う方法

入力欄の値を検証してボタンの有効無効を切り替える処理をカスタムフックにまとめることで、コードをよりシンプルにすることができます。

import React, { useState } from 'react';

function useInputValidation() {
  const [inputValue, setInputValue] = useState('');

  const isInputValid = () => {
    return inputValue !== '';
  };

  return {
    inputValue,
    setInputValue,
    isInputValid,
  };
}

function App() {
  const { inputValue, setInputValue, isInputValid } = useInputValidation();

  return (
    <div>
      <input
        type="text"
        value={inputValue}
        onChange={(event) => setInputValue(event.target.value)}
      />
      <button disabled={!isInputValid}>送信</button>
    </div>
  );
};

export default App;
  • useInputValidationというカスタムフックを作成して、入力欄の値を検証してボタンの有効無効を切り替える処理をまとめました。
  • Appコンポーネントでは、useInputValidationフックを使って、inputValuesetInputValueisInputValidという3つの値を取得しています。

reactjs


React Routerで/#/問題を解決!簡単3ステップでクリーンなURLを実現

BrowserRouter の basename プロップを使用する最も簡単な方法は、BrowserRouter コンポーネントの basename プロップを使用することです。これは、ルーティングプレフィックスを設定し、#/ を含めないようにするものです。...


JestとAxiosを使った、テスト駆動型のReact + Reduxアプリケーション開発

Jestは、JavaScriptコードをテストするための人気のあるフレームワークです。Axiosは、JavaScriptでHTTPリクエストを行うためのライブラリです。ReactとReduxは、JavaScriptでシングルページアプリケーションを構築するためのライブラリです。...


JavaScript, React, EcmaScript-6:デフォルトプロップとデフォルトパラメータを徹底比較

デフォルトプロップは、コンポーネント定義内にオブジェクトとして宣言します。この例では、color と fontSize という2つのプロパティにデフォルト値を設定しています。コンポーネント使用時にこれらのプロパティが渡されなければ、デフォルト値が使用されます。...


ReactJSでwindow.open()とfetch()を使ってファイルをダウンロードする方法

window. open() を使う方法は、最もシンプルで簡単な方法です。以下のコードのように、window. open() を使ってファイルのURLを開くと、ブラウザがファイルを自動的にダウンロードします。このコードは、fileUrl で指定されたファイルのURLを新しいウィンドウで開きます。ブラウザの設定によっては、ダウンロードが自動的に開始されない場合があります。その場合は、ユーザーにダウンロードボタンをクリックさせる必要があります。...


JavaScript、HTML、ReactJSでJSX構文エラー「Support for the experimental syntax 'jsx' isn't currently enabled」が発生した場合の対処方法

このエラーメッセージは、JavaScript、HTML、ReactJSを扱う開発環境において、JSXと呼ばれる実験的な構文がサポートされていないことを示しています。JSXは、ReactJSなどのライブラリで使用される特別な構文であり、HTMLコードをJavaScript内に直接記述することを可能にします。...


SQL SQL SQL SQL Amazon で見る



ReactJSの動的属性で実現!コンポーネントの再利用性と条件付きレンダリング

動的属性を使用する利点は以下の通りです。コンポーネントの再利用性を向上: 属性を動的に設定することで、同じコンポーネントを様々な状況で使い回すことができます。コンポーネントの条件付きレンダリング: 属性値に基づいて、コンポーネントの一部をレンダリングしたりレンダリングしなかったりする条件付きレンダリングを実現できます。