</> reset:
<T>(values?: T | ResetAction<T>, options?: Record<string, boolean>) => void
フォームの状態、フィールド参照、サブスクリプション全体をリセットします。オプション引数があり、部分的なフォーム状態のリセットを許可します。
プロパティ
Reset
は、formStateを保持する機能があります。使用できるオプションを以下に示します。
名前 | 型 | 説明 |
---|---|---|
values | オブジェクト | フォームの値をリセットするためのオプションのオブジェクトです。指定する場合は、**すべての**defaultValuesを提供することをお勧めします。 |
keepErrors | ブール値 | すべてのエラーは残ります。これは、以降のユーザー操作を保証するものではありません。 |
keepDirty | ブール値 | DirtyFields フォームの状態は残り、isDirty は、ユーザーによるさらなる操作が行われるまで、一時的に現在の状態として残ります。重要:このkeepオプションは、フォームの入力値を反映するのではなく、汚れたフィールドのフォームの状態のみを反映します。 |
keepDirtyValues | ブール値 | DirtyFields とisDirty は残りますが、クリーンなフィールドのみが最新のレスト値に更新されます。例をご覧ください。重要:フォームの状態 dirtyFields を購読する必要があります。 |
keepValues | ブール値 | フォームの入力値は変更されません。 |
keepDefaultValues | ブール値 | useForm で初期化されたのと同じdefaultValuesを保持します。
|
keepIsSubmitted | ブール値 | isSubmitted の状態は変更されません。 |
keepTouched | ブール値 | isTouched の状態は変更されません。 |
keepIsValid | ブール値 | isValid は、ユーザーによる追加の操作が行われるまで、一時的に現在の状態として保持されます。 |
keepSubmitCount | ブール値 | submitCount の状態は変更されません。 |
ルール
-
制御されたコンポーネントの場合、
Controller
コンポーネントの値をreset
するには、defaultValues
をuseForm
に渡す必要があります。 -
defaultValues
がreset
APIに提供されない場合、フォームを復元するためにHTMLネイティブのreset APIが呼び出されます。 -
useForm
のuseEffect
が呼び出される前にreset
を呼び出さないでください。これは、reset
がフォームの状態更新をフラッシュするためのシグナルを送信する前に、useForm
のサブスクリプションの準備が整っている必要があるためです。 -
送信後、
useEffect
内でreset
を実行することをお勧めします。useEffect(() => {reset({data: "test",})}, [isSubmitSuccessful]) -
useForm
でdefaultValues
を提供している限り、引数なしでreset
を実行しても問題ありません。reset(); // update form back to default valuesreset({ test: 'test' }); // update your defaultValues && form valuesreset(undefined, { keepDirtyValues: true }); // reset other form state but keep defaultValues and form values
例
非制御
import { useForm } from "react-hook-form"interface UseFormInputs {firstName: stringlastName: string}export default function Form() {const {register,handleSubmit,reset,formState: { errors },} = useForm<UseFormInputs>()const onSubmit = (data: UseFormInputs) => {console.log(data)}return (<form onSubmit={handleSubmit(onSubmit)}><label>First name</label><input {...register("firstName", { required: true })} /><label>Last name</label><input {...register("lastName")} /><input type="submit" /><input type="reset" value="Standard Reset Field Values" /><inputtype="button"onClick={() => reset()}value="Custom Reset Field Values & Errors"/></form>)}
コントローラー
import React from "react"import { useForm, Controller } from "react-hook-form"import { TextField } from "@material-ui/core"interface IFormInputs {firstName: stringlastName: string}export default function App() {const { register, handleSubmit, reset, setValue, control } =useForm<IFormInputs>()const onSubmit = (data: IFormInputs) => console.log(data)return (<form onSubmit={handleSubmit(onSubmit)}><Controllerrender={({ field }) => <TextField {...field} />}name="firstName"control={control}rules={{ required: true }}defaultValue=""/><Controllerrender={({ field }) => <TextField {...field} />}name="lastName"control={control}defaultValue=""/><input type="submit" /><input type="button" onClick={reset} /><inputtype="button"onClick={() => {reset({firstName: "bill",lastName: "luo",})}}/></form>)}
リセットして送信
import { useForm, useFieldArray, Controller } from "react-hook-form"function App() {const {register,handleSubmit,reset,formState,formState: { isSubmitSuccessful },} = useForm({ defaultValues: { something: "anything" } })const onSubmit = (data) => {// It's recommended to reset in useEffect as execution order matters// reset({ ...data })}React.useEffect(() => {if (formState.isSubmitSuccessful) {reset({ something: "" })}}, [formState, submittedData, reset])return (<form onSubmit={handleSubmit(onSubmit)}><input {...register("something")} /><input type="submit" /></form>)}
フィールド配列
import React, { useEffect } from "react"import { useForm, useFieldArray, Controller } from "react-hook-form"function App() {const { register, control, handleSubmit, reset } = useForm({defaultValues: {loadState: "unloaded",names: [{ firstName: "Bill", lastName: "Luo" }],},})const { fields, remove } = useFieldArray({control,name: "names",})useEffect(() => {reset({names: [{firstName: "Bob",lastName: "Actually",},{firstName: "Jane",lastName: "Actually",},],})}, [reset])const onSubmit = (data) => console.log("data", data)return (<form onSubmit={handleSubmit(onSubmit)}><ul>{fields.map((item, index) => (<li key={item.id}><input {...register(`names.${index}.firstName`)} /><Controllerrender={({ field }) => <input {...field} />}name={`names.${index}.lastName`}control={control}/><button type="button" onClick={() => remove(index)}>Delete</button></li>))}</ul><input type="submit" /></form>)}
動画
ご支援ありがとうございます
React Hook Formがプロジェクトで役立つと感じた場合は、スターを付けてサポートをご検討ください。