0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Reactのバリデーション関数

Posted at

はじめに

とあるシステムで、予約フォームを作成することになりました。
フロントエンドはReactで作成しています。

今回はバリデーション関数についていくつか調べて実装したので、備忘も兼ねてまとめておきます。

バリデーション関数とは

そもそもバリデーション関数ってなんぞや?
という話からです。

予約フォームを入力するとき、記入事項に漏れがあったりすると「入力必須の項目が漏れています」
などのアラート文が表示されるかと思います。
あれです。

バリデーション関数を実装することで、次のことができるようになります。

  • データ整合性の統一
  • 必須項目が漏れたままフォーム入力完了を防ぐ

具体的な実装方法

Reactでバリデーション関数を実装する場合、主に次の二つのイベントハンドラーを使って実装します。
イベントハンドラーの中でバリデーション関数を呼び出します。

  • handleChange
  • handleBlur

それぞれ具体的に見ていきましょう。

handleChange

フォームの入力値が変更されたときに呼び出されるイベントハンドラーです。
ユーザが項目を入力するたびに、入力欄のバリデーションを確認してエラーハンドリングをしています。
つまり、文字を打つたびにエラーが画面に表示されます。

handleBlur

入力フィールドからフォーカスが外れたときに呼び出されるイベントハンドラーです。
ユーザが入力を完了した後、次の項目に移った時にエラーが出力されます。

サンプルコード

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

const nameForm = () => {
  const [name, setName] = useState('');
  const [nameError, setNameError] = useState('');

  const validateName = () => {
    if (name.trim() === '') {
      setNameError('名前を入力してください');
    } else {
      setNameError('');
    }
  };

  const handleChange = (e) => {
    setName(e.target.value);
  };

  const handleBlur = () => {
    validateName();
  };

  return (
    <div>
      <label htmlFor="name">名前</label>
      <input
        type="text"
        id="name"
        value={name}
        onChange={handleChange}
        onBlur={handleBlur}
      />
      {nameError && <p style={{ color: 'red' }}>{nameError}</p>}
    </div>
  );
};

export default nameForm;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?