React Hook Form
React.jsで簡単に<form>を作るためのReact Hooks library
最近できたlibraryっぽい
React Hooks用だから、当然か
以前からあるForm Componentとしては、FormikやRedux Formがあるらしい
install
$ yarn add react-hook-form
使い方
以下、公式サイトのcodeを元に若干改変
code:sample.tsx
import React from "react";
import { useForm } from "react-hook-form";
type Inputs = {
example: string,
exampleRequired: string,
};
export default function App() {
hookを宣言する
code:sample.tsx
const { register, handleSubmit, watch, errors } = useForm<Inputs>();
Formを送信したときに実行される関数
code:sample.tsx
const onSubmit = data => console.log(data);
watchでformに入力されている値をreal timeに取得できる
<input>のnameを渡して、値を取得したい部品を指定する
code:sample.tsx
console.log(watch("example"))
HTMLっぽい部分
基本的には、refにregisterを渡せばいい
引数にvalidationの設定を渡せる
{ required: true }で標準のvalidationが有効になる
errorのときに文字列を表示したいときは、required: 'message'と設定する
正規表現で検証したいときはpatternを使う
<input type="email">とかはemail用正規表現を明示的に指定しないと検証できない
code:ts
{
required: 'an invalid value',
pattern: {
value: /^\d+:\d+$/,
message: 'Pleas input hh:mm',
}
}
onSubmitに渡す関数はhandleSubmitでwrapする
こうすると値のval
code:sample.tsx
return (
<form onSubmit={handleSubmit(onSubmit)}>
{/* register your input into the hook by invoking the "register" function */}
<input name="example" defaultValue="test" ref={register} />
<input name="exampleRequired" ref={register({ required: true })} />
{errors.exampleRequired && <span>This field is required</span>}
<input type="submit" />
</form>
);
}
Links
HP: ホーム | React Hook Form - Simple React forms validation
多言語対応している
/emoji/github.icon: react-hook-form/react-hook-form
References
はじめる | React Hook Form - Simple React forms validation
日本語訳されたdocumentがすっごい充実している
日本語訳がここまで充実しているthird-party libraryは珍しい気がするtakker.icon
React Hook Form 入門 - Qiita
Redux Formが非推奨っぽいことになっている旨が冒頭に書いてある
載っているcode sample & 解説
validation
初期値設定
特定の入力値で挙動を変える
入れ子のform
複数画面をまたぐform
react-hook-formの基本的な使い方 - Qiita
React Hook Formがいい感じ! - エンジニアの本棚
TypeScriptでreact-hook-formを使ってみた|ryoppei|note
defaultValueを設定するとハマるときがある
いらないときは削除しちゃっていいみたい
React Hook Formは非制御コンポーネントからどのように変更を検知しているのか?
非制御Componentの話
非制御フォームをやるならこんなふうに Recoil編
React Hook Formを1年以上運用してきたちょっと良く使うためのTips in ログラス(と現状の課題)
#2023-08-23 11:55:32
#2020-11-26 12:36:50