環境は
react : 16.12
typescript : 3.7
react-hook-form : 4.7.2
でお送りします。
インストール
npmでライブラリのインストールをしましょう。
$ npm install react-hook-form
一つだけのバリデーション
準備ができたのでさっそく使ってみましょう。
最初に入力が必須のバリデーションを設定してみます。
InputForm
というフォーム用のコンポーネントを作る想定で進めます。
import React, { useState } from 'react' import { useForm } from 'react-hook-form' type FormData = { title: string } const InputForm: React.FC = () => { const { register, handleSubmit, errors, reset } = useForm<FormData>() const handleOnSubmit = (data: FormData) => { console.log(data.title); reset() } return ( <div> <form onSubmit={handleSubmit(handleOnSubmit)}> <input type="text" className={errors.title && 'error'} name="title" ref={register({ required: 'タイトルは必ず入力してください。' })} /> { errors.title && <span className="error-message">{ errors.title.message }</span> } <button className="btn is-primary">追加</button> </form> </div> ) } export default InputForm
- 2行目
- useFormを使用するので、インポートしましょう。
- 3〜6行目
- TypeScriptを使用している場合はフォームに使用する型を設定します。
- 9行目
- useFormで使用する機能を変数に入れます。
- 11行目
-
フォームが送信されたとき実行される関数です。(18行目で設定してます。)
引数は設定したFormData
の形式で扱うことができます。
reset
関数でインプットに入力した値をクリアーすることができます。 - 18行目
form
にhandleSubmit
を設定する必要があるので基本的にそのまま書きます。- 21行目
- エラーの時inputにもスタイル設定したいときは書きます。
- 23行目
-
バリデーションは
rel
に設定します。
「入力必須」の場合は、required: 'エラーメッセージ'
という形で設定します。 - 27行目
-
エラーがあったとき表示するメッセージです。
エラーになるとerrors.title.message
にregister
で設定した文字列が入ります。
複数のバリデーション
先ほどは必須だけでしたが、基本的には文字数を設定したりとか複数のバリデーションを組み合わせるのがほとんどだと思います。
必須条件に追加して、3文字以上、100文字以下の条件を追加してみましょう。
register
を次の様に変更しましょう。
<input type="text" className={errors.title && 'error'} name="title" ref={register({ required: 'タイトルは必ず入力してください。', minLength: { value: 3, message: 'タイトルは3文字以上入力してください。' }, maxLength: { value: 100, message: 'タイトルは100文字以内で入力してください。' } })} />
minLength
とmaxLength
に関しては制御する文字数も必要なので、value
、message
の形で設定します。
正規表現でカスタムバリデーションを設定する方法
バリデーションタイプは最低限のものしか用意されていないので、独自に設定する場合はpattern
を使います。
<input type="text" className={errors.title && 'error'} name="title" ref={register({ required: '必ず入力してください。', pattern: { value: /^\d{3}-\d{4}$/, message: '正しい郵便番号を入力してください。' } })} />
基本的な使い方は以上です。
その他にも色々機能がありますので詳しくは、下記ドキュメントをご確認ください。
React Hook Form
この記事の動画(Youtube)版はこちら!