register (name: string, RegisterOptions?) => ({ onChange, onBlur, name, ref })
このメソッドを使用すると、input要素またはselect要素を登録し、React Hook Formに検証ルールを適用できます。検証ルールはすべてHTML標準に基づいており、カスタム検証メソッドも許可します。
register関数を呼び出し、inputの名前を指定すると、次のメソッドを受け取ります。
プロパティ
名前 | 型 | 説明 |
---|---|---|
onChange | ChangeHandler | inputの変更イベントをサブスクライブするための |
onBlur | ChangeHandler | inputのblurイベントをサブスクライブするための |
name | string | 登録されているinputの名前。 |
Input Name | 送信結果 |
---|---|
register("firstName") | {firstName: 'value'} |
register("name.firstName") | {name: { firstName: 'value' }} |
register("name.firstName.0") | {name: { firstName: [ 'value' ] }} |
戻り値
ヒント:: register APIを呼び出した後、inputに何が起こったか
const { onChange, onBlur, name, ref } = register('firstName');// include type check against field path with the name you have supplied.<inputonChange={onChange} // assign onChange eventonBlur={onBlur} // assign onBlur eventname={name} // assign name propref={ref} // assign ref prop/>// same as above<input {...register('firstName')} />
オプション
registerオプションを選択すると、以下のAPIテーブルが更新されます。
名前 | 説明 | コード例 |
---|---|---|
ref React.Ref | React要素のref |
|
required boolean | trueの場合、フォームを送信する前にinputに値が必要であることを示すブール値。 注意: この設定は、必須input検証のためのWeb制約APIと一致します。 |
|
maxLength
| このinputで受け入れる値の最大長。 |
|
minLength
| このinputで受け入れる値の最小長。 |
|
max
| このinputで受け入れる最大値。 |
|
min
| このinputで受け入れる最小値。 |
|
pattern
| inputの正規表現パターン。 注意: /gフラグ付きのRegExpオブジェクトは、マッチが発生したlastIndexを追跡します。 |
|
validate 関数 | オブジェクト | 検証の引数としてコールバック関数を渡すことも、すべてのコールバック関数を検証するオブジェクトを渡すこともできます。この関数は、 注意: |
|
valueAsNumberboolean | 通常はNumberを返します。何か問題が発生した場合
|
|
は変換しません。boolean | valueAsDate
|
|
<input />setValueAs | <T>(value: any) => T
|
|
disabled boolean = false |
スキーマ検証の場合、inputまたはコンテキストオブジェクトから返される |
|
onChange (e: SyntheticEvent) => void | 変更イベントで呼び出される |
|
onBlur (e: SyntheticEvent) => void | blurイベントで呼び出される |
|
value unknown | 登録されたinputの値を設定します。このプロパティは、 |
|
shouldUnregisterboolean | アンマウント後にinputが登録解除され、defaultValuesも削除されます。 注意: このプロパティは、inputがアンマウント/再マウントおよび並べ替え後に |
|
depsstring | string[] | 依存するinputの検証がトリガーされます。これは |
|
ルール
name
は必須であり、一意です(ネイティブのラジオとチェックボックスを除く)。input名はドット構文とブラケット構文の両方をサポートしており、ネストされたフォームフィールドを簡単に作成できます。name
は数字で開始したり、キー名として数字を使用したりすることはできません。特殊文字も避けてください。TypeScriptの使用方法の一貫性のためだけにドット構文を使用しているため、ブラケット
[]
は配列フォーム値では機能しません。register('test.0.firstName'); // ✅register('test[0]firstName'); // ❌disabled
inputは、undefined
フォーム値を生成します。ユーザーがinputを更新できないようにする場合は、readOnly
を使用するか、<fieldset />全体を無効にすることができます。これは 例.フィールドの配列を生成するには、input名の後に ドットと数字を続ける必要があります。例:
test.0.data
レンダリングごとに名前を変更すると、新しいinputが登録されます。登録された各inputには静的な名前を維持することをお勧めします。
inputの値と参照は、アンマウントに基づいて削除されなくなります。unregisterを呼び出して、その値と参照を削除できます。
個々のregisterオプションは、
undefined
または{}
で削除することはできません。代わりに個々の属性を更新できます。register('test', { required: true });register('test', {}); // ❌register('test', undefined); // ❌register('test', { required: false }); // ✅型チェックと競合する前に避ける必要がある特定のキーワードがあります。それらは、
ref
、_f
です。
例
import * as React from "react";import { useForm } from "react-hook-form";export default function App() {const { register, handleSubmit } = useForm({defaultValues: {firstName: '',lastName: '',category: '',checkbox: [],radio: ''}});return (<form onSubmit={handleSubmit(console.log)}><input {...register("firstName", { required: true })} placeholder="First name" /><input {...register("lastName", { minLength: 2 })} placeholder="Last name" /><select {...register("category")}><option value="">Select...</option><option value="A">Category A</option><option value="B">Category B</option></select><input {...register("checkbox")} type="checkbox" value="A" /><input {...register("checkbox")} type="checkbox" value="B" /><input {...register("checkbox")} type="checkbox" value="C" /><input {...register("radio")} type="radio" value="A" /><input {...register("radio")} type="radio" value="B" /><input {...register("radio")} type="radio" value="C" /><input type="submit" /></form>);}
動画
次のビデオでは、register
APIについて詳しく説明しています。
ヒント
カスタム登録
useEffect
でinputをregister
し、それらを仮想inputとして扱うこともできます。制御されたコンポーネントの場合、カスタムフック useEffect
でinputをregister
し、それらを仮想inputとして扱うこともできます。制御されたコンポーネントの場合、このプロセスを処理するためにカスタムフック useControllerと Controller コンポーネントを提供します。
手動でフィールドを登録することを選択した場合、 setValue.
register('firstName', { required: true, min: 8 });<TextInput onTextChange={(value) => setValue('lastChange', value))} />
でinput値を更新する必要があります。innerRef、inputRefを操作する方法
カスタムinputコンポーネントがrefを正しく公開しない場合は、次のようにして動作させることができます。
// not working, because ref is not assigned<TextInput {...register('test')} />const firstName = register('firstName', { required: true })<TextInputname={firstName.name}onChange={firstName.onChange}onBlur={firstName.onBlur}inputRef={firstName.ref} // you can achieve the same for different ref name such as innerRef/>// correct way to forward input's refconst Select = React.forwardRef(({ onChange, onBlur, name, label }, ref) => (<select name={name} ref={ref} onChange={onChange} onBlur={onBlur}><option value="20">20</option><option value="30">30</option></select>));
ご支援ありがとうございます
React Hook Formがプロジェクトで役立つと思われる場合は、スターを付けてサポートをご検討ください。