はじめに
こんにちは!
今回は、Reactでフォーム操作を簡単にするためのライブラリ「react-hook-form」の中でも、特に便利な機能であるwatch()
について解説します!
この関数を使えば、フォームの入力値をリアルタイムで監視できるので、インタラクティブなUIを簡単に実現できます。
watch()って何?
watch()
とは、react-hook-formが提供する関数で、フォームフィールドの現在の値を監視し、変更があるたびにその値を取得できる機能です。
これにより、ユーザーの入力に基づいた動的な動作を簡単に実装できます。
公式ドキュメントにもwatch()
の詳細な説明がありますので、ぜひチェックしてみてください。
REACT HOOK FORM
基本的な使い方
まずは、watch()
の基本的な使い方を見てみましょう。以下のコードを例に解説します。
import React from "react";
import { useForm } from "react-hook-form";
const BasicExample = () => {
const { register, watch } = useForm();
// watchでフォームの値を監視
const name = watch("name");
return (
<div>
<h1>React Hook Form - watch() Example</h1>
<form>
<label>
Name:
<input {...register("name")} placeholder="Enter your name" />
</label>
</form>
<p>リアルタイム入力: {name}</p>
</div>
);
};
export default BasicExample;
解説:
register("name")
: フォームフィールドを登録します。watch("name")
:"name"
フィールドの値をリアルタイムで監視します。- ユーザーが入力した名前が、すぐに
<p>
タグ内に反映されます。
watch()の使い方【応用編】
1. 全てのフィールドを監視する
watch()
に引数を渡さなかった場合、すべてのフィールドの値をオブジェクトとして取得できます。
const { register, watch } = useForm();
const allValues = watch();
これを実際のコードに組み込むと、以下のように全フィールドの値をリアルタイムで表示できます。
2. 特定のフィールドを条件付きで監視
特定のフィールド値によって、フォームの他のフィールドを制御することも可能です。
import React from "react";
import { useForm } from "react-hook-form";
const ConditionalFields = () => {
const { register, watch } = useForm();
// 条件付きで値を監視
const showDetails = watch("showDetails");
return (
<form>
<label>
Show Details:
<input type="checkbox" {...register("showDetails")} />
</label>
{showDetails && (
<label>
Details:
<input {...register("details")} placeholder="Enter details" />
</label>
)}
</form>
);
};
export default ConditionalFields;
解説:
"showDetails"
フィールドの値を監視し、チェックが入った場合のみ、"details"
フィールドを表示します。
3. watch()のデフォルト値を設定する
初期値を設定する場合、defaultValues
をuseForm
で指定します。
import React from "react";
import { useForm } from "react-hook-form";
const DefaultValuesExample = () => {
const { register, watch } = useForm({
defaultValues: {
name: "John Doe",
},
});
const name = watch("name");
return (
<form>
<label>
Name:
<input {...register("name")} />
</label>
<p>Initial value: {name}</p>
</form>
);
};
export default DefaultValuesExample;
4. watch()を使った動的なスタイリング
入力値によって動的にUIを変化させることも簡単です。
import React from "react";
import { useForm } from "react-hook-form";
const DynamicStylingExample = () => {
const { register, watch } = useForm();
const name = watch("name");
return (
<div>
<form>
<label>
Name:
<input
{...register("name")}
style={{
borderColor: name ? "green" : "red",
}}
/>
</label>
</form>
<p style={{ color: name ? "green" : "red" }}>
{name ? "Valid Input" : "Input is required"}
</p>
</div>
);
};
export default DynamicStylingExample;
watch()の引数
- 単一のフィールド名:
"fieldName"
のように文字列で指定すると、特定のフィールドだけを監視します。 - 配列形式:
["field1", "field2"]
のように配列で渡すと、複数のフィールドを同時に監視できます。 - 省略: 引数を省略すると、全てのフィールドの値をオブジェクト形式で取得します。
おわりに
watch()
は、フォームの入力値をリアルタイムで監視するための非常に強力なツールです。これを使うことで、動的なフォームやインタラクティブなUIが簡単に実現できます。
ぜひ、この記事を参考にして、react-hook-form
でのフォーム操作をより便利にしてくださいね!
関連する記事はこちら↓↓